我遇到了一个`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标签,而不仅仅是最后一个?
答案 0 :(得分:0)
看起来你循环,每次重置$sql1
,然后我假设你在循环后执行最后一个查询。你应该做的是在你的循环中构建一个复合INSERT
语句,并在最后执行它。在循环中执行多个INSERT
是不好的做法,您可以使用一个查询轻松插入多行。
像...一样的东西。
$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函数已弃用,不安全,将在以后的版本中删除。
答案 1 :(得分:0)
怎么样:
$sql = array();
foreach($html->find('a') as $element)
{
$sql[] = "INSERT INTO page (site_id,url) VALUES (LAST_INSERT_ID(),'$element->href')";
}
只需使用和数组存储所有查询,以便稍后可以使用foreach循环执行它们,或者直接在您提供的foreach循环中执行数据库查找