2012-01-16 2 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

定期的なエラーを使用しています。 –

+2

コードの書式を改善してください。あの厄介なことが何であるかを見るのは難しいです。また、そのコードを関連する部分だけにすることもできますか? – deceze

+0

code&query ok、 'COMMIT'は不要です(あなたが' BEGIN'トランザクションを実行しなかったので)、 'mysql_query( 'INSERT ...')の結果は何ですか?スキーマは何ですか? – ori

答えて

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); 
} 
関連する問題