Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mysqli_num_行问题_Php_Sql_Mysqli - Fatal编程技术网

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()
上。您应该查看而不是连接查询。这将使您的查询更安全,即使您正在逃避用户输入(在使用准备好的语句时,您根本不需要麻烦)。感谢您的支持。多亏了你的指导,我才得以解决这个问题。谢谢你的支持。多亏了你的指导,我才得以解决这个问题。谢谢你的支持。多亏了你的指导,我才得以解决这个问题。谢谢你的支持。多亏了你的指导,我才得以解决这个问题。谢谢你的支持。多亏了你的指导,我才得以解决这个问题。