2012-07-12 50 views
-1

基本上,我從表單中抽取四個變量的值,然後使用這些值作爲WHERE語句從數據庫中的表中進行選擇。我只是在這裏提供了我的代碼片段,因爲我已經驗證了正確的值是從表單發送到有問題的變量,並且代碼工作得很好,並且在我只檢查if語句時移到了else語句中groupid和memberid。mysql_num_rows():提供的參數不是有效的MySQL結果資源(唯一的)

groupid是一個4位數字。 memberid是一個3位數字。 這個名字是像John A. Smith 這樣的全名,而dob是一個像1900-10-31

的日期

我試圖運行的查詢如下。在我收到MySQL錯誤後,它顯示消息「成員不存在」。我在這裏錯過了什麼?

$qry="SELECT * FROM members WHERE groupid = $groupid AND memberid = $memberid AND membername = $name AND memberdob = $dob"; 
$result=mysql_query($qry); 

if(mysql_num_rows($result) == 0) 
    { 
    echo "Member does not exist"; 
    } 
else {.... 
+5

查詢失敗,錯誤檢查,找出原因 – 2012-07-12 20:42:04

+0

是否打印$結果,看看它是否是空還是假的? – 2012-07-12 20:42:22

+1

membername和memberdob的值需要引用 – 2012-07-12 20:44:55

回答

2
$qry="SELECT * FROM members 
     WHERE groupid = $groupid 
     AND memberid = $memberid 
     AND membername = '$name' 
     AND memberdob = '$dob'"; 

加引號membernamememberdob

2

GROUPID是一個4位數字。 memberid是一個3位數的數字。名字是像約翰·A·史密斯這樣的全名,並且dob是類似於1900-10-31的日期

這就是你的想法。黃金法則:never trust any input from user

如果你想堅持mysql的擴展,那麼首先用mysql_real_escape_string來清理輸入。其次,引用你傳遞給查詢的變量。所以,與其

$qry = "... WHERE groupid = $groupid ..."; 

$qry = "... WHERE groupid = '" . mysql_real_escape_string($groupid) . "'..."; 

在你的情況下,最可能的原因查詢失敗是$name變量。它包含空格。該空間是查詢中斷的地方。引用變量將解決問題:

$qry = "SELECT * 
     FROM members 
     WHERE groupid = '" . mysql_real_escape_string($groupid) . "' 
     AND memberid = '" . mysql_real_escape_string($memberid) . "' 
     AND membername = '" . mysql_real_escape_string($name) . "' 
     AND memberdob = '" . mysql_real_escape_string($dob) . "'"; 

另外,改進錯誤處理的查詢執行。簡單的例子:

$result = mysql_query($qry) or die('Invalid query: ' . mysql_error()); 

這將返回詳細的錯誤描述,這將有助於您確定根本原因。

至於不鼓勵MySQL擴展的推薦選擇:請閱讀PHP手冊中的Choosing an API

1

由於不瞭解應用程序的整個上下文,我將假定變量在從表單中檢索後正確處理。

如果mysql沒有用引號括起來,它通常會抱怨字符串字段。 可能是$ name和$ memberdob從表單中正確檢索到,但沒有根據需要傳遞給查詢。 試着改變你的查詢到如下:

​​
相關問題