我在这里争论一个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。
感谢您的关注。
答案 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
更多的信息。
使用echo
,boolean
,NULL
和空值可能会以相同的方式显示(无)。使用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'