【问题标题】:PHP While loop not finishing after nested foreach finishes嵌套foreach完成后PHP While循环未完成
【发布时间】:2013-11-12 04:55:15
【问题描述】:

内部 foreach 循环完成后,外部 while 循环永远不会恢复。当内部完成时,文件向命令报告,就好像它已经完成一样。它从不回显“+++++++”。

该脚本旨在从 api 中提取一些数据并将该数据保存到表中,该 api 以 1000 为一组返回记录,因此外部 while 循环提取多组 1000。该脚本多次返回“已保存”但绝不是'++++++'。有什么想法吗?

while ($iterations > 0) {

        $results = json_decode(file_get_contents("http://foo.bar?start=$start$limit=1000"), true);

        foreach ($results['SearchResult']['Records'] as $result) {

                //search table
                $query = "SELECT id from sometable where name = '".$result['something']."'";
                $res = mysql_query($query, $conn) or die(mysql_error());
                $branch = mysql_fetch_assoc($res) or die(mysql_error());

                //save to table
                $query = "INSERT INTO `table` some values)";
                if (mysql_query($query, $conn) or die(mysql_error())) {
                    echo 'SAVED';
                }   


        }
        $start = $start+1000;
        $iterations--;

        echo "++++++++++++++++++++";
    }

【问题讨论】:

  • 你在哪里定义 $iterations?
  • 停止使用 mysql 扩展。使用 mysqli 或 PDO。
  • 不要使用 mysql_ 函数,因为它们已被弃用。请改用mysqliPDO
  • 您的 die() 调用之一是否可能被调用?您是否尝试省略它们以查看输出,或者日志中是否有任何错误?
  • 仍在尝试了解大局。您说“已保存”获取返回了很多次。你的桌子呢?他们真的在更新吗?您看到任何信息还是只看到“已保存”一词?

标签: php loops


【解决方案1】:

这可能会导致问题:

if (mysql_query($query, $conn) or die(mysql_error())) {

die() 命令作为if 语句的一部分进行处理。

相反,我会这样做:

$q=mysql_query($query, $conn) or die(mysql_error());
if ($q) {

【讨论】:

  • showdev:我想既然它会运行,如果一次又一次地保存它不会在完成 foreach 时捕获。感谢您的帮助。
  • 其他人:我使用了我知道的旧mysql,我不应该。感谢您的帮助。
  • 你并不真正需要 die() 除非你想脚本在遇到查询错误时退出。只需检查return value of mysql_query 就足以捕获有问题的查询。 TRUE 表示成功,FALSE 表示失败。 if (mysql_query($query, $conn)) {...}
猜你喜欢
  • 1970-01-01
  • 2020-08-03
  • 2013-07-12
  • 2017-08-20
  • 2021-08-20
  • 2020-06-29
  • 2022-10-12
  • 2017-04-29
  • 2017-06-10
相关资源
最近更新 更多