为什么这个SQL查询会抛出警告?

时间:2010-06-01 12:00:41

标签: php mysql

  

可能重复:
  mysql_num_rows(): supplied argument is not a valid MySQL result resource

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

获取此警告警告:mysql_num_rows():提供的参数不是...中的有效MySQL结果资源。

6 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

或尝试

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

答案 2 :(得分:0)

尝试输出$query的内容,然后将其粘贴到某个查询执行工具中。

答案 3 :(得分:0)

这不能直接回答您的问题,但可能有更好的方法来检查重复项。考虑将电子邮件字段修改为唯一。从mySQL命令行(或PHPMyAdmin)执行以下操作:

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

现在,如果您尝试插入电子邮件已存在的行,则会自行为您抛出错误。

答案 4 :(得分:0)

我认为您需要从$ email中删除大括号。

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

答案 5 :(得分: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];

可以组合代码中的行。它们被分开以便更容易看到正在发生的事情。