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

时间:2018-08-03 07:25:54

标签: 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行。

我一直在为这个烦恼。我可能做错了什么?

1 个答案:

答案 0 :(得分:2)

您在顶部和内部循环中有两个名称为$sql的变量:在您完成INSERT查询之后,很可能第二次调用$sql->fetch()无效。

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