首先是代码
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结果。
答案 0 :(得分:3)
因为当你没有行时,你基本上得到0 or die()
。 0是“假的”,所以你的骰子被执行了。你不想在那里die()
,基本上只是删除它。
$sql = mysqli_num_rows($query); // Don't use die() for this
在查询后使用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()
并死亡。