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_time时间增加到 5-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

如果在您的数据中的任何一点,有一个或多个单引号,您的查询将失败并触发该die()语句。您可以清理每个变量以删除或替换这些字符,或者您可以远离已弃用的 mysql_* 函数并使用带有 mySQLi 或 PDO 的参数化查询。这表示:

  1. 您不必从输入中清除特殊字符。
  2. 您的代码将不太容易受到 SQL 注入的影响。
  3. 在最新版本的 PHP 中,您的代码不会生成 E_DEPRECATED 消息。
  4. 删除这些函数后,您的代码不会在 PHP 的未来版本中中断。
  5. 最重要的是,人们会停止无休止地喋喋不休地谈论您使用的功能,而忽略您的实际问题。
于 2013-03-05T23:14:47.983 回答