-2

我在这里与 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

4 回答 4

1

首先,echo $q你会看到你没有正确分割 $_POST,因为它$_POST['mail']带有引号。这就是您引用键控数组的方式。

其次,不要对数据库查询进行字符串连接(或使用 mysql_):mysql_* 函数已被弃用且具有潜在危险,最终将停止工作。请改用 PDO。否则,您将在某个时候重构所有内容,并将已知漏洞引入您的代码中。

请参阅“如何防止 PHP 中的 SQL 注入?” ,2008 年的一个问题,以及2005 年的给我参数化 SQL,或者给我死亡

编辑:

你的目标是什么?计算具有给定电子邮件的条目数,对吗?没有从数据库中检索所有内容。MySQLCOUNT为此目的提供了一个功能:(SELECT COUNT(mail) FROM info WHERE mail = ?1那是准备好的语句版本,请阅读它)。然后,您的结果将只包含一行,它本身就是数据库中与您的查询匹配的行数。将这种逻辑推送到数据库比在 PHP 中执行要高效得多,尤其是在大型数据库中。

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

于 2013-07-25T03:18:50.433 回答
0

首先,您可能想要将 更改$_POST[mail]$_POST['mail']

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

于 2013-07-25T03:17:25.883 回答
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()- 我猜一个严重弃用的保护总比没有好。

于 2013-07-25T08:53:20.980 回答
-1

尝试改变

$mail=$_POST[mail]; 

$mail=$_POST['mail'];

此外,为了正确的语法,将 MYSQL 大写如下。

SELECT * FROM info WHERE email='$mail'
于 2013-07-25T03:15:43.490 回答