0

サイトからデータを抽出してSQLデータベースに入れるための次のコードがあります。217エントリで停止しますが、619の異なるページがあります。画面にエコーするかデータベースに保存するかにかかわらず、この番号では失敗します。エラーメッセージはありません。

なぜですか?

for($i = 1; $i <= 619; $i++) {

$str = file_get_contents('http://fantasy.mlssoccer.com/web/api/elements/'.$i.'/');
$jsonarray = json_decode($str, true);

//get row data and store in variables
$id = $jsonarray['id'];
$name = addslashes($jsonarray['web_name']);
$team = $jsonarray['team_name'];
$pos = $jsonarray['type_name'];
$flag = $jsonarray['status'];
$cost = ($jsonarray['now_cost']/10);
$ownedby = $jsonarray['selected'];
$balance = $jsonarray['transfers_balance'];

$playerupdate = mysql_query("
INSERT INTO playerprices (id, name, team, pos, flag, cost, ownedby, balance) 
VALUES ('$id', '$name', '$team', '$pos', '$flag', '$cost', '$ownedby', '$balance') 
ON DUPLICATE KEY UPDATE flag = '$flag', cost = '$cost', ownedby = '$ownedby', balance = '$balance'") 
or die (mysql_error());

}

216〜220ページの変数のみをエコーすると、すべて正常に機能するため、これらのページのデータとは関係がないと思います。私が見ることができる特殊文字はありません。

4

2 に答える 2

1

エラーを取り除く(display_errors表示を有効にする)には、

致命的なエラー:5行目のC:\ xampp \ htdocs \ stackoverflow\file_get_contents.phpで最大実行時間が30秒を超えました

max_execution_time5〜10分に増やしてみてください。

ini_set('max_execution_time', 1000); //300 seconds = 5 minutes

または、を介してスクリプトを実行しますcommand line

コマンドラインからPHPを実行する場合、デフォルト設定は0です。(出典:PHP.net、2012)。

于 2013-03-05T22:59:18.933 に答える
0

データのいずれかの時点で、1つ以上の一重引用符がある場合、クエリは失敗し、die()ステートメントをトリガーします。すべての変数をスクラブしてこれらの文字を削除または置換するか、非推奨のmysql_ *関数から離れて、mySQLiまたはPDOでパラメーター化されたクエリを使用することができます。これの意味は:

  1. 入力から特殊文字をスクラブする必要はありません。
  2. コードはSQLインジェクションの影響を受けにくくなります。
  3. 最近のバージョンのPHPでは、コードはE_DEPRECATEDメッセージを生成しません。
  4. これらの関数が削除されても、PHPの将来のバージョンでコードが破損することはありません。
  5. 最も重要なことは、peopelは、実際の質問を無視しながら、使用する機能について際限なくあなたを悩ませることをやめます。
于 2013-03-05T23:14:47.983 に答える