【问题标题】:Data is not going into database during loop循环期间数据未进入数据库
【发布时间】:2012-02-11 04:45:22
【问题描述】:

我在下面写了从网页中提取数据,但这是连续运行而没有将数据插入表中。如何在下面的代码中拆分此传输。

我想立即为每个 url 插入并在循环中提交。这不起作用:

<?php
// example of how to use basic selector to retrieve HTML contents
ini_set('log_errors','0');
ini_set('display_errors','1');
error_reporting(2047);
include('simple_html_dom.php');
include('parameters.php');
// get DOM from URL or file

set_time_limit(0);
$site_name="sitename";
mysql_connect($hostname, $user, $pass) or
                die("Could not connect: " . mysql_error());
mysql_select_db($database);
$query="select site_name,category,subcategory,link,first_no,last_no 
        from `search_links` where site_name='".$site_name."'";

echo $query;
$res=mysql_query($query);

while ($row = mysql_fetch_assoc($res)) 
{      
    $links[]=array(
        "site_name"=>$row["site_name"],
        "category"=>$row["category"],
        "subcategory"=>$row["subcategory"],
        "url"=>$row["link"],
        "first_no"=>$row["first_no"],
        "last_no"=>$row["last_no"]);    
}

foreach ($links as $link)    
{
    for ($i=$link["first_no"];$i<$link["last_no"];$i++)
    {
        try 
        {
            $html = file_get_html($link["url"].$i);    
            $sql = array();
            foreach($html->find('a') as $e)
            {
                $sql[] = "('".$e->href."',
                    '".$site_name."',
                    '".$link["category"]."',
                    '".$link["subcategory"]."','N')";
            }
            #var_dump($sql);
            mysql_connect($hostname, $user, $pass) or
                die("Could not connect: " . mysql_error());
            mysql_select_db($database);

            $sql_ext=" ON DUPLICATE KEY update duplicate='Y'";
        /*//echo('INSERT INTO table (link,site,category,subcategory, archived) 
            VALUES '.implode(',', $sql));*/
            mysql_query(
                'INSERT INTO classifieds (link,site,category,subcategory, archived)
                VALUES '.implode(',', $sql).$sql_ext);    
            mysql_query("COMMIT");
        }
        catch(Exception $e)
        {
            echo 'Message: ' .$e->getMessage();
        }
    }
}
?>

【问题讨论】:

  • 您能改进一下您的代码格式吗?很难看出什么属于那个混乱的缩进。另外,是否可以将该代码缩减为仅相关部分?
  • 代码和查询看起来没问题,COMMIT 是不必要的(因为你没有BEGIN 任何事务),mysql_query('INSERT...') 的结果是什么?架构是什么?

标签: php mysql html dom loops


【解决方案1】:

mysql 扩展不会抛出异常。
所以,要么使用定期错误报告

$sql = 'INSERT INTO classifieds (link,site,category,subcategory, archived)
        VALUES '.implode(',', $sql).$sql_ext;
mysql_query($sql) or trigger_error(mysql_error().$sql); 

或者这样抛出异常

if (!mysql_query($sql)) {
   throw new Exception(mysql_error().$sql); 
}

【讨论】:

    猜你喜欢
    • 2018-06-20
    • 1970-01-01
    • 2015-01-31
    • 2022-12-01
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多