0

我遇到了一个`foreach循环,我想在DOM解析后将其导入数据库,包括所有标签/href。这是我的循环:

foreach($html->find('a') as $element) 
{       
    $sql1="INSERT INTO page (site_id,url) VALUES (LAST_INSERT_ID(),'$element->href')";  
}

这是一个可以正常工作的:

$j=1;
foreach($html->find('a') as $element) 
{       
    echo $j++ . ') HREF: ' . $element->href . ' ' . '<br>';         
}

如何让第一个循环存储所有 href 标签,而不仅仅是最后一个?

4

2 回答 2

0

看起来您循环遍历,$sql1每次都重置,然后我假设您执行循环后的最后一个查询。你真正应该做的是INSERT在你的循环中构建一个复合语句,并在最后执行它。在一个循环中执行多个INSERTs 是不好的做法,您可以通过一个查询轻松插入多行。

就像是...

$values .= sprintf('(%s), ', $element->href);

当然,您需要删除结尾的逗号。就像是...

$values = substr ($values, 0, strlen($values)-1);

接着...

$sql1="INSERT INTO page (url) VALUES ($values)";

另外,我不知道你为什么需要使用LAST_INSERT_ID. 您可能想创建一个AUTOINCREMENT列,然后让 MySQL 完成这项工作。如果你解释你想做什么,LAST_INSERT_ID我可以提供更好的建议。

不言而喻,您应该使用 PDO 或 MySQLi 准备好的语句。PHP 的 MySQL 函数已弃用、不安全,将在未来版本中删除。

于 2013-01-11T16:43:30.720 回答
0

关于什么:

$sql = array();
    foreach($html->find('a') as $element) 
{       
     $sql[] = "INSERT INTO page (site_id,url) VALUES (LAST_INSERT_ID(),'$element->href')"; 
}

只需使用和数组来存储所有查询,以便稍后使用 foreach 循环执行它们,或者直接在您提供的 foreach 循环中进行数据库查找

于 2013-01-11T16:44:45.333 回答