2012-02-25 53 views
-1

可能重複:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given inMySQL的PHP​​函數選擇

function arr($string) 
    { 
     $tank5 = "SELECT url FROM `db`.`tank` WHERE url LIKE {$string}"; 
     $result5 = mysql_query($tank5); 
      if (!$result5) { 
    die('Invalid query: ' . mysql_error()); 
} 

     $parts2 = array(); 
     while ($p = mysql_fetch_array($result5)) { 
      $parts2[] = $p['url']; 
     } 

     // return the array created. 
     return $parts2; 
    } 

    $array5 = arr('lol.com');  
    print_r($array5); 

爲什麼不把上面的代碼工作。我得到的錯誤是
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /usr/local/...
所以我想這不是數據庫連接問題。任何想法?

+0

@minitech:你好,這個問題已經解決了。查詢需要百分號來查找類似的域。無論如何,我更新了連接檢查的代碼。 – sg552 2012-02-25 17:25:55

回答

3

很可能,您使用的是LIKE子句,但未將通配符傳遞給$string。因此,它只會找到完全匹配。因爲你沒有引用輸入值(假設函數的輸入參數還沒有引號,這看起來不太可能),而是圍繞着$string%和單引號。

$tank5 = "SELECT url FROM `db`.`tank` WHERE url LIKE '%$string%'"; 

我們假定調用此函數之前,你已經逃脫$string針對SQL注入這樣的:

$string = 'lol.com'; 
$string = mysql_real_escape_string($string); 
$arr = arr($string); 
+0

非常感謝。這是問題,百分比符號。我知道查詢需要百分比符號,因爲我從昨天開始就忙於這件事。我忘了那件事。再次感謝。 – sg552 2012-02-25 17:32:19

2

您在查詢中沒有執行任何錯誤檢查,所以難怪您的腳本打破查詢失敗。如何做正確的錯誤檢查the manual或本reference question.

例概述:

$result5 = mysql_query($tank5); 
if (!$result5) 
{ trigger_error("mySQL error: ".mysql_error()); // output the error 
    die(); 
} 
在您的具體情況

,問題可能是你沒有包裝你的搜索字符串中,像這樣的報價:

$tank5 = "SELECT url FROM `db`.`tank` WHERE url LIKE '{$string}'"; 
+0

感謝您的建議。我想如果我使用這種''array5 = arr('lol.com')之類的函數之外的撇號,'它會起作用。我感謝您的幫助。 – sg552 2012-02-25 17:29:24