2010-06-01 60 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]; 

代码中的行可以组合。他们被分开,以便更容易看到发生了什么。