2012-10-19 69 views
-1

Possible Duplicate:
mysql_fetch_array() expects parameter 1 to be resource, boolean given in select
mysql_fetch_assoc() expects parameter 1 to be resourcePHP mysql_fetch_assoc錯誤

我試圖從一個表中提取單個字段,並將其添加到另一個。

這是我第三天使用MySQL/PHP,所以我有一個小問題。
PHP拋出一個錯誤,期望一個資源但給出一個字符串。
這是一個表中自動遞增的ID字段。

基本上,我拉的名字和姓氏匹配的ID。

$query5 = "SELECT FROM ".$db_prefix."customer_det (`id`) 
WHERE fname = '".$fname."' 
AND lname = '".$lname."'"; 

$result5 = mysql_query($query5); 
while($row = mysql_fetch_assoc($result5)){ 
$uid = $row['id']; 
echo "$uid"; 
} 

錯誤:

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given

+1

請使用['mysqli_ *'](http://php.net/mysqli)函數或[PDO ](http://php.net/PDO)而不是'mysql_ *'函數。 – nkr

+0

它引發警告:mysql_fetch_assoc()期望參數1是資源,現在給出的布爾值 – smada

+0

這是可怕的代碼,並會打開你的SQL注入攻擊。請使用相當於PHP中預準備語句的任何內容。 – R0MANARMY

回答

0

我要去猜測,引發錯誤的行是這一個:

while($row = mysql_fetch_assoc($result5)){ 

功能mysql_fetch_assoc是「期待一個資源」中,你需要通過它的結果SQL查詢,它將從這些結果中獲取。然而,$result5不是SQL查詢,這是一個字符串:

$result5 = "mysql_query($query5)"; 

我不知道爲什麼你把引號解決這個問題,但如果你想真正擁有這些代碼是你不想讓他們有解釋:

$result5 = mysql_query($query5); 

這將運行mysql_query功能和它的返回值(這是一種資源)放入$result5


現在有更重要的東西...

首先,你的代碼是SQL injection attacks敞開的。關於這一點還有很多需要知道的事情,單個Stack Overflow答案不會涵蓋它。所以我會試着總結一下這個概念,只是說你永遠不應該使用使用用戶輸入值的原始字符串連接來構建一個SQL查詢。用戶可以輸入惡意輸入並修改查詢,從而有效地訪問數據庫。如果數據庫以提升的權限運行,那麼他們可以訪問服務器上的更多內容,依此類推。

基本上,總是淨化你的輸入從不隱信任輸入來自用戶

二,不要使用mysql_函數。它們已經被mysqli_函數取代,原因並不完全與我剛纔提到的SQL注入無關。 The documentation page for them even very clearly states this

+0

David我欣賞所有信息。一旦引號被移除,它仍然會拋出錯誤。 – smada

+0

@ user1718270:SQL查詢中是否發生錯誤,導致不會返回有效的資源?你可以使用'mysql_error'從數據庫中獲取錯誤信息:http://php.net/manual/en/mysqli.error.php – David

+0

@ user1718270:我剛剛注意到......你實際上並沒有選擇任何東西在你的SQL查詢。問題出在SQL代碼中,而不是PHP代碼。注意你直接從'select'到'from',而不指定你選擇的內容。如果您想從該表中選擇所有內容,請使用:'select * from' – David

4
$result5 = "mysql_query($query5)"; 
     ^    ^

刪除引號。

如果您使用var_dump($result5);,您會得到它是string。原因是在雙引號或單引號中的所有內容都被視爲字符串。

你也需要處理這樣的錯誤:

$result5 = mysql_query($query5) or die(mysql_error()); 

因爲mysql_query將失敗

返回false如果你有興趣的字符串表示看一看manual

此外,您的查詢中有語法錯誤。你缺少你想從數據庫中檢索某些列:

$query5 = "select from ".$db_prefix."customer_det (`id`) where fname = '".$fname."' and lname = '".$lname."'"; 
       ^

select

注意添加*(列或名稱):mysql_*功能已被棄用。替代方案是:mysqli_*PDO

+0

你必須在開玩笑...語法正在殺死我。它仍然拋出相同的錯誤。 – smada

+0

只是爲了澄清小巴的一點。 引號中的所有內容都被視爲一個字符串,但是,使用雙引號內的變量將爲您提供值,而不是變量名稱。這是因爲對雙引號內的變量進行評估。 另一方面,單引號不會這樣做,因此使用起來更快。 –

+0

@ user1718270查看更新後的答案。你需要檢查發生了什麼錯誤。 – Leri

1
$query5 = "select from ".$db_prefix."customer_det (`id`) where fname = '".$fname."' and lname = '".$lname."'"; 
$result5 = mysql_query($query5); 
while($row = mysql_fetch_assoc($result5)){ 
    $uid = $row['id']; 
    echo "$uid"; 
} 
0

Change--

$result5 = "mysql_query($query5)"; 

TO

$result5 = mysql_query($query5); 
0

使用此

$result5 = mysql_query($query5); 

取而代之的是

$result5 = "mysql_query($query5)"; 
0

你缺少從查詢所選字段(id)名稱:

$query = "SELECT id FROM {$db_prefix}customer_det WHERE fname = '{$fname}' AND lname = '{$lname}'"; 
$result = mysql_query($query); 
while($row = mysql_fetch_assoc($result)){ 
    echo $row['id']; 
} 
相關問題