2012-01-16 46 views
0

我已經在下面寫了從網頁中提取數據,但這是連續運行的,無需將數據插入表中。我如何在下面的代碼中分割這個分支。在循環期間數據不會進入數據庫

我想立即爲每個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(); 
     } 
    } 
} 
?> 
+2

什麼是你的錯誤消息。 – 2012-01-16 07:20:35

+2

你能否改善你的代碼格式?很難看到什麼屬於什麼與那搞砸縮進。另外,可能只將代碼切割到相關部分? – deceze 2012-01-16 07:23:26

+0

code&query look ok,'COMMIT'是不必要的(因爲你沒有'BEGIN'任何事務),mysql_query('INSERT ...')'的結果是什麼?模式是什麼? – ori 2012-01-16 10:22:08

回答

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); 
}