2012-12-18 90 views
0

我有一個履帶式抓取以www.bbc.co.uk/news開頭的網站。它抓取所有以http://www.bbc.co.uk/news開頭的鏈接,並找到它們的描述,鏈接和標題並將它們插入到數據庫中。插入語句在foreach語句中不起作用

由於某種原因,它似乎並未插入。

任何想法?

PS有完全不輸出,完全空白的網頁

foreach ($links as $link) { 
    $output = array(
"title"  => Titles($link), //dont know what Titles is, variable or string? 
"description" => getMetas($link), 
"keywords" => getKeywords($link), 
"link"  => $link     
); 
if (empty($output["description"])) { 
$output["description"] = getWord($link); 
} 

if (substr($ouput, 0, 26) == "http://www.bbc.co.uk/news/") { 

$data = '"' . implode('" , "', $output) . '"'; 
$success = mysql_query("INSERT INTO news_story (`title`, `description` , `keywords`, `link`) 
VALUES (" . $data . ")") or zerror_reporting(); 
if ($sucess) { 
echo "YEAH!"; 
    } 

    if (!$sucess) { 
echo "NO!!"; 
    } 
    print_r($data); 
    }} 
+1

爲什麼不使用他們的[feeds](http://www.bbc.co.uk/news/10628494)? – Dale

回答

0

$ouput變化$output上線

if (substr($ouput, 0, 26) == "http://www.bbc.co.uk/news/") { 
0

的空白頁是產生500 Internal Server Error響應一個PHP致命錯誤。受此未定義功能zerror_reporting()造成的:

mysql_query(...) or zerror_reporting(); 

改變,要像

mysql_query(...) or trigger_error(mysql_error()); 

的trigger_error()調用將MySQL的錯誤添加到您的錯誤日誌。

第二個問題是你想substr()陣列上,你應該做的是,link元素:

if (substr($output['link'], 0, 26) == "http://www.bbc.co.uk/news/") { 
0

消毒你的價值在插入數據庫之前

1

問題是在這裏:

if (substr($ouput, 0, 26) == "http://www.bbc.co.uk/news/") { 

    $data = '"' . implode('" , "', $output) . '"'; 
    $success = mysql_query("INSERT INTO news_story (`title`, `description` , `keywords`, `link`) 
    VALUES (" . $data . ")") or zerror_reporting(); 
if ($sucess) { 
echo "YEAH!"; 
    } 

哪裏是你$ouput變量...我想你想寫$output ..但它也沒有執行,因爲$output變量是一個數組而非string

0

@Mrinmoy的解決方案是正確的,但由於代碼從未觸及過這個問題,因此代碼中出現更多問題。

第一組顯示的錯誤:

ini_set('error_reporting',E_ALL); 
ini_set('display_errors','on'); 
foreach ($links as $link) { 

PHP談了很多,如果你能聽。 我個人使用E_ALL | E_STRICT,但對於今天來說這太少了。 :) 然後清理您的數據,否則您很少會成功插入記錄。您的數據將有很多的句子:

$output = array(
"title"  => mysql_real_escape_string(Titles($link)), //dont know what Titles is, variable or string? 
"description" => mysql_real_escape_string(getMetas($link)), 
"keywords" => mysql_real_escape_string(getKeywords($link)), 
"link"  => mysql_real_escape_string($link)     
); 
if (empty($output["description"])) { 
$output["description"] = mysql_real_escape_string(getWord($link)); 
} 

然後糾正錯字變量和使用輸出數組的鏈接索引:

if (substr($output['link'], 0, 26) == "http://www.bbc.co.uk/news/") { 

最後,如果你還沒有得到數據,你一定會知道更多來自己修復它。在調用mysql_query之前使用print_r($output); echo $data;。通過填寫代碼echo __LINE__ . "\n";來查看進度的另一種方式,以查看其死亡地點。驗證代碼中是否有方法zerror_reporting或替換爲die(mysql_error());