Php Mysqli_num_行问题
首先是代码Php Mysqli_num_行问题,php,sql,mysqli,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) { $_SESSIO
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部分失效。我不明白为什么。当我在数据库中运行查询时,它工作正常并返回0个结果。因为当没有行时,基本上会得到
0或die()
。0是“falsy”,因此您的骰子被执行。你不想在那里有一个die()
,基本上只要把它去掉就行了
$sql = mysqli_num_rows($query); // Don't use die() for this
看这个
在查询后使用
或die()
更为常见,尽管这不是处理错误的最佳方法,但这可能是您以前见过的
$query = mysqli_query($dbcon, "SELECT * FROM user WHERE login = '$login' AND password ='$pass'") or die ("Query failed ".mysqli_error($dbcon));
此外,您还应该查看准备好的语句,以保护数据库不受SQL注入的影响。请参阅下面给出的链接
0或die()
。0是“falsy”,因此您的骰子被执行。你不想在那里有一个die()
,基本上只要把它去掉就行了
$sql = mysqli_num_rows($query); // Don't use die() for this
看这个
在查询后使用
或die()
更为常见,尽管这不是处理错误的最佳方法,但这可能是您以前见过的
$query = mysqli_query($dbcon, "SELECT * FROM user WHERE login = '$login' AND password ='$pass'") or die ("Query failed ".mysqli_error($dbcon));
此外,您还应该查看准备好的语句,以保护数据库不受SQL注入的影响。请参阅下面给出的链接
或die()
不是PHP的一些特殊错误处理功能。它实际上对左右值执行逻辑或。它通常用于通过返回0
on error的函数处理错误,因为它是一个短路运算符。这意味着,如果第一个操作数不是“True”值,它只对第二个操作数求值(有关在PHP中如何处理True/false的信息,请参阅)
这里发生的是$sql=sqli\u num\u行($query)或die()
与$sql=0或die()相同。因为0是一个假值,所以它尝试计算die()
和dies。或die()
不是PHP的一些特殊错误处理功能。它实际上对左右值执行逻辑或。它通常用于通过返回0
on error的函数处理错误,因为它是一个短路运算符。这意味着,如果第一个操作数不是“True”值,它只对第二个操作数求值(有关在PHP中如何处理True/false的信息,请参阅)
这里发生的是$sql=sqli\u num\u行($query)或die()
与$sql=0或die()相同。由于0是一个假值,它尝试计算die()
并死亡。永远不要存储纯文本密码!请使用PHP来处理密码安全性。如果您使用的PHP版本低于5.5,则可以使用密码\u hash()
。在散列之前,请确保对它们进行了清理或使用了任何其他清理机制。这样做会更改密码并导致不必要的额外编码。从以$sql
开头的行中删除或die()
,或die()
应该在mysqli\u query()
行,而不是mysqli\u num\u rows()
上。您应该查看而不是连接查询。这将使您的查询更安全,即使您正在逃避用户输入(在使用准备好的语句时,您根本不需要麻烦)。感谢您的支持。多亏了你的指导,我才能够解决这个问题。永远不要存储纯文本密码!请使用PHP来处理密码安全性。如果您使用的PHP版本低于5.5,则可以使用密码\u hash()
。在散列之前,请确保对它们进行了清理或使用了任何其他清理机制。这样做会更改密码并导致不必要的额外编码。从以$sql
开头的行中删除或die()
,或die()
应该在mysqli\u query()
行,而不是mysqli\u num\u rows()
上。您应该查看而不是连接查询。这将使您的查询更安全,即使您正在逃避用户输入(在使用准备好的语句时,您根本不需要麻烦)。感谢您的支持。多亏了你的指导,我才得以解决这个问题。谢谢你的支持。多亏了你的指导,我才得以解决这个问题。谢谢你的支持。多亏了你的指导,我才得以解决这个问题。谢谢你的支持。多亏了你的指导,我才得以解决这个问题。谢谢你的支持。多亏了你的指导,我才得以解决这个问题。