mysql num行返回false

时间:2013-07-25 03:11:02

标签: php mysql mysql-num-rows

我在这里争论一个mysql_num_rows问题,因为它总是返回false。

$mail=$_POST[mail];

$q="select * from info where email='$mail'";

$query2=mysql_query($q,$con);


$rows = mysql_num_rows($query2);


if($rows > 0){
// Here we are checking if username is already exist or not.
echo "<script>newmail()</script>";
exit;
}  

即使我认为我正在添加现有的电子邮件$rows永远不会>0,我也尝试回复它,但它并没有给我什么,也许是因为它返回false。

感谢您的关注。

4 个答案:

答案 0 :(得分:1)

首先,echo $q你会发现你没有正确切割$ _POST,因为它是$_POST['mail']带引号。那是how you reference keyed arrays

其次,不进行数据库查询的字符串连接(或使用mysql_):mysql_* functions are deprecated and potentially dangerous并最终停止工作。而是Use PDO。否则,您将在某些时候重构所有内容,并将已知的漏洞引入您的代码中。

请参阅"How to prevent SQL injection in PHP?",2008年的问题以及2005年的Give me parameterized SQL, or give me death

修改

你的目标是什么?计算具有给定电子邮件的条目数,对吗? 不从数据库中检索所有内容。 MySQL为此目的有一个COUNT函数:SELECT COUNT(mail) FROM info WHERE mail = ?1(这是预处理语句版本,读取它)。然后,您的结果将只包含一行,该行本身将是数据库中与您的查询匹配的行数。将这种逻辑推送到数据库比在PHP中,特别是大型数据库中更有效率。

现在,明显且更紧迫的问题似乎是您的查询失败了。如果你打开一个MySQL shell并输入select * from info where email='email@example.com';,你会得到一个结果,还是一个错误?可能是一个错误。您确定有一个名为info的表吗?您确定已连接到正确的数据库吗?上面的另一个相关问题解决了这些问题。

答案 1 :(得分:0)

首先,您可能希望将$_POST[mail]更改为$_POST['mail']

如果还没有解决问题,请在代码中的某处添加echo $q;语句,以确认您正在查询您真正要查询的内容。

答案 2 :(得分:0)

在您的情况下,mysql_num_rows()始终返回0,因为您的查询找不到匹配项:它基于使用不存在的变量进行定义的变量。

如前所述,$_POST[mail]需要引号:$_POST['mail'],例如。

在调试上下文中,您可能希望使用var_dump()来测试$mail and $_POST['mail'](您将在其中发现'邮件'缺少引号)。它将提供比简单echo更多的信息。

使用echobooleanNULL和空值可能会以相同的方式显示(无)。使用var_dump(),您可以了解变量的性质。与您的帖子输入一起使用时,string(0)表示它只是空的,而NULL可能意味着它不存在,因此您产生了语法错误。

此外,您需要保护您的查询免受SQL注入。你应该使用PDO,虽然在这个快速修复环境中你可以使用mysql_real_escape_string() - 我想大肆弃用的保护总比没有好。

答案 3 :(得分:-1)

尝试更改

$mail=$_POST[mail]; 

$mail=$_POST['mail'];

另外,对于恰当的语法,请按如下方式将MYSQL大写。

SELECT * FROM info WHERE email='$mail'