簡體   English   中英

插入語句在foreach語句中不起作用

[英]Insert statement not working in foreach statement

我有一個搜尋器,可搜尋以www.bbc.co.uk/news開頭的網站。 它捕獲以http://www.bbc.co.uk/news開頭的所有鏈接,並找到它們的描述,鏈接和標題,並將其插入數據庫中。

由於某種原因,它似乎沒有插入。

有任何想法嗎?

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

問題在這里:

 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

空白頁是PHP致命錯誤,會產生500 Internal Server Error響應。 這是由於此未定義的函數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/") {

在插入數據庫之前對您的值進行消毒

@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/") {

最后,如果您仍然無法獲得數據,那么您肯定會知道自己要修復的更多信息。 並使用print_r($output); echo $data; print_r($output); echo $data; 在調用mysql_query之前。 通過使用echo __LINE__ . "\\n";填充代碼來跟蹤進度的另一種方法echo __LINE__ . "\\n"; echo __LINE__ . "\\n"; 看看它死在哪里。 驗證代碼中是否存在名稱為zerror_reporting的方法,或替換為die(mysql_error());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM