MySQL Query不会选择上面的19以上的id

时间:2014-01-14 15:26:37

标签: php mysql database

这是我正在运行的代码。奇怪的是,如果我在PHPMyAdmin中运行完全相同的查询,它运行得很好。

但是对于任何超过19的ID,die()子句会激活,但mysql_error()为空,返回的行数为0.

这是我见过的最奇怪的事情,好像我把id放到1到19就可以了。

$sql = "SELECT * FROM booking WHERE `id`='21'";
$res = mysql_query($sql) or die(mysql_error());
if($res)
{
    $ct = mysql_num_rows($res) or die(mysql_error());
    echo $ct;
} 

2 个答案:

答案 0 :(得分:4)

看起来和你的“错误”似乎就在这一行:

$ct = mysql_num_rows($res) or die(mysql_error());

有了这个,如果mysql_num_rows($res)返回0(意思是“找不到与您的查询匹配的结果”),您的or die(mysql_error())部分将会执行,并且由于没有实际错误,{{ 1}}将返回空。

尝试删除mysql_error()部分并更改为更方便用户使用的内容:

die()

答案 1 :(得分:1)

这两件事之一就是在这里工作。

1)mysql_query($ sql)可能因SQL查询中的错误而失败,并且如以下几行所示:

$sql = "SELECT * FROM booking WHERE `id`='21'";
$res = mysql_query($sql) or die(mysql_error());

不是这种情况,因为查询是基本的并且构造良好(尽管非常不安全,请检查PDO和参数化查询)。

2)mysql_num_rows($ res)为0 / null / false,PHP脚本终止,如以下几行所示:

$ct = mysql_num_rows($res) or die(mysql_error());

在您的方案中会发生什么,因为您的查询不会返回任何结果 - 请仔细检查上面的内容是否存在ID 19。

在相关的说明中,如果没有找到结果,那么die()是不好的做法。最好向最终用户写一条描述性和信息性的信息,以便他知道发生了什么。