在dom解析后如何在mysql中插入所有href标签?

时间:2013-01-11 16:39:51

标签: php foreach

我遇到了一个`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标签,而不仅仅是最后一个?

2 个答案:

答案 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循环中执行数据库查找