Mysqli_num_rows问题

时间:2017-02-06 22:48:42

标签: php sql mysqli

首先是代码

mysqli_free_result($wynik);

$query = mysqli_query($dbcon, "SELECT * FROM user WHERE login = '$login' AND password ='$pass'");

$sql = mysqli_num_rows($query) 
        or die(drop dead);

echo $sql;

if ($sql > 0) {

                $_SESSION['user'] = $login;
                $_SESSION['auth'] = TRUE;
                echo $login;

我对此代码有一个小问题。当$ query找到一个结果时,一切正常,但是当它返回没有结果时,$ sql part就会死掉。我不明白为什么。当我在数据库中运行查询时,它工作正常并返回0结果。

2 个答案:

答案 0 :(得分:3)

因为当你没有行时,你基本上得到0 or die()。 0是“假的”,所以你的骰子被执行了。你不想在那里die(),基本上只是删除它。

$sql = mysqli_num_rows($query); // Don't use die() for this

live demo

在查询后使用or die()更为常见,虽然这不是最好的错误处理方式,但这可能是您之前见过的地方

$query = mysqli_query($dbcon, "SELECT * FROM user WHERE login = '$login' AND password ='$pass'") or die ("Query failed ".mysqli_error($dbcon));

此外,您应该查看预准备语句以保护您的数据库免受SQL注入。请参阅下面给出的链接。

答案 1 :(得分:0)

or die()不是PHP的一些特殊错误处理功能。它实际上对左右值执行逻辑 OR 。它通常用于处理错误返回0的函数的错误,因为它是短路运算符。这意味着它只评估第二个操作数,如果第一个操作数不是" True" value(有关如何在PHP中处理true / false的信息,请参阅How does true/false work in PHP?。)

此处发生的事件$sql = sqli_num_rows($query) or die()$sql = 0 or die()相同。由于0是假值,因此它会尝试评估die()并死亡。