2010-06-01 66 views
0

可能重複:
mysql_num_rows(): supplied argument is not a valid MySQL result resource爲什麼此SQL查詢引發警告?

  $resultnx = mysql_query("SELECT * FROM `emails` WHERE `email` = '{$email}'"); 
     $num_rows = mysql_num_rows($resultnx); 

得到這個警告警告:mysql_num_rows():提供的參數不是一個有效的MySQL結果資源中....

+0

我應該提一下,先前的代碼在數據庫中至少放置了1個實例。它應該幫助我檢查重複。 – user355367 2010-06-01 12:02:14

+0

此代碼似乎易受SQL注入攻擊。改用準備好的語句。 – Tgr 2010-06-01 12:32:42

回答

4

看起來您的查詢中存在一些錯誤,請使用die來查看它是什麼錯誤:

$query = "SELECT * FROM `emails` WHERE `email` = '{$email}'"; 
$resultnx = mysql_query($query) or die(mysql_error()); 
$num_rows = mysql_num_rows($resultnx); 

此外,檢查,以確保$email通過罰款來:

var_dump($email); 
+0

MySQL服務器已經走了? – user355367 2010-06-01 12:09:01

+0

@ user355367:這是您收到的錯誤嗎? – Sarfraz 2010-06-01 12:10:55

+0

是的。該腳本運行了一段時間,然後它將其刪除。它的變量很好。 – user355367 2010-06-01 12:13:39

0

或者嘗試

$query = "SELECT * FROM `emails` WHERE `email` = '".$email."'"; 
$resultnx = mysql_query($query) or die(mysql_error()); 
$num_rows = mysql_num_rows($resultnx); 
0

嘗試輸出的$query的內容,然後將其粘貼到一些查詢執行工具。

0

這並不直接回答你的問題,但可能有更好的方法來檢查重複。考慮將電子郵件字段修改爲唯一。從你的MySQL命令行(或PHPMyAdmin中)執行以下操作:

ALTER TABLE `emails` ADD UNIQUE(`email`); 

現在,如果你嘗試插入其中的電子郵件已存在,將拋出一個錯誤你都對自己的行。

0

我認爲你需要從$ email刪除花括號。

$query = "SELECT * FROM `emails` WHERE email = '$email'"; 
$resultnx = mysql_query($query) or die(mysql_error()); 
$num_rows = mysql_num_rows($resultnx); 
0

您收到直接

MySQL服務器已消失

錯誤肯定是由MySQL服務器關閉引起的。如果MySql Server和PHP腳本在同一個VPS上,那麼您將需要搜索導致數據庫關閉(崩潰)的確切原因。檢查服務器錯誤日誌。他們應該告訴你問題是什麼。


而是執行查詢你寫的方式,你爲什麼不乾脆做,而不是下面的查詢:

$query = "SELECT count(*) FROM `emails` WHERE `email` = '".$email."'"; 

這樣,你可以只拉行的數目,而不是所有在MySql上運行的數據要快得多(特別是在索引email時)。

$query = "SELECT count(*) FROM `emails` WHERE `email` = '".$email."'"; 
$resultnx = mysql_query($query) or die(mysql_error()); 
$num_rows_array = mysql_fetch_array($resultnx); 
$num_rows = $num_rows_array[0]; 

代碼中的行可以組合。他們被分開,以便更容易看到發生了什麼。