php - MySQL 在 php foreach 循环中仅插入几行

标签 php mysql foreach

我的 PHP 循环遇到了问题,如下所述。

$query1 = "SELECT * FROM volume_issue";
$sql=$con->prepare($query1);
$sql->execute();

while ($row = $sql->fetch()) {
    //echo $row['id'] . "&nbsp". $row['url']."<br />\n";
    $volume_issue_id = $row['id'];
    $url = $row['url'];
    $volume_issue = $row['volume_issue'];
    $html2 = file_get_html($url);
    //
    //echo $url . '<br>';
    $html = file_get_html($url);

    foreach($html->find('table[class="tocArticle"]') as $div){
        //echo $div->innertext . '<br>';
        //echo "<p/>". $div->nodeName. ": ";
        foreach($div->find('td[class="tocTitle"]') as $td){
            //echo $td . "<br />";
            foreach ($td->find('a') as $links){
                $url =$links->href;
                $title = $links->innertext;
                echo $title . '<br>';
                $query1 = "INSERT INTO citations_url (title,url) VALUES (:title,:url)";
                $sql=$con->prepare($query1);
                $sql->execute(array(
                                  ':title' => $title,
                                  ':url' => $url
                                  ));


            }

        }

    }
}

问题是这个循环只插入 20 行而不是 615 行。此外,当我删除 MySQL 查询并回显 $title 时,我得到 615 行。但是,当我包含 MySQL 查询并回显 $title 时,我得到 20 行,但只插入了 20 行。

我一直在为这个问题绞尽脑汁。我可能做错了什么?

最佳答案

您有 2 个名为 $sql 的变量:位于顶部和内部循环中。很可能在完成 INSERT 查询后,对 $sql->fetch() 的第二次调用不起作用。

尝试重命名第二个变量,这样它们就不会重叠。

关于php - MySQL 在 php foreach 循环中仅插入几行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51667356/

相关文章:

PHP strpos() 返回奇怪的结果

mysql - 无法弄清楚为什么我的 SQL 查询没有返回结果

php - Laravel LeftJoin where

c++ - 可以安全地使用指向 vector 元素的指针来确定它在容器中的位置吗?

php - 在使用 foreach + mysql INSERT 时遇到问题

php - 表单操作和发布方法不起作用 php

php - PHP preg_replace() 中的正则表达式产生空结果

php - 使用 time() 更新 MySQL TIMESTAMP 字段?

mysql - Solr 应该用作只读数据库吗?

php - foreach: "in"诉 "as"