在foreach循环中写入数据库的链接失败

时间:2014-07-31 18:05:48

标签: php mysql

我正在使用simple html dom将记录写入数据库,但它似乎并没有写入记录。

问题在于foreach循环。它输出所有网址和以下错误:

  

注意:未定义的变量:第28行的C:\ xampp \ htdocs \ meh \ crawler.php中的url

<?php
// Create connection
$con=mysqli_connect("localhost","root","spidermankillssuperman","expatriates");

// Check connection
if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
?>
<?php
include_once('../simple_html_dom.php');

$links = array (
    'http://www.expatriates.com/classifieds/bhr/hs/index100.html'

);
foreach ($links as $link) {
    $html = file_get_html($link);

    foreach($html->find('a') as $element) {
        if(strpos($element->href, "cls"))
            $url = "http://expatriates.com".$element->href . '<br>';

        echo $url;
    }

    $sql="INSERT INTO urlstocrawl (url)
    VALUES ('$url')";

    if (!mysqli_query($con,$sql)) {
        die('Error: ' . mysqli_error($con));
    }
    echo '<br>'.'<p>'."1 record added";
}
mysqli_close($con);
?>

1 个答案:

答案 0 :(得分:3)

您希望您的mysql查询在您的html文件中插入 foreach 链接,而不是在循环后运行一次。在循环中移动代码:

foreach ( $html->find('a') as $element ) {
    if ( strpos($element->href, "cls") !== false ) {
        $url = "http://expatriates.com" . $element->href . '<br>';
        $sql = "INSERT INTO urlstocrawl (url) VALUES ('$url')";
        if ( !mysqli_query($con,$sql) ) {
            die('Error: ' . mysqli_error($con));
        }
        echo '<br>'.'<p>'."1 record added" . $url;
    }
}

请注意对if条件的修改。当字符串不存在时,strpos()返回false或者指示位置的整数从0开始。这意味着如果cls位于字符串的开头,则条件可能会失败。通过这种严格的类型检查,您可以确定所需的行为。