0

我正在从 MySQL 转换为 MySQLi,我注意到如果我在 mysql 查询中限制为一行,是否有必要检查行数是否为 1?毕竟,可以返回的行是 0 或 1。

这是我目前使用的代码(未经测试,因为我正在从 mysql 转换为 mysqli):

$query = "SELECT email,auth,username FROM user_list WHERE id = '".$user["id"]."' LIMIT 1";
$query = $mysqli->query($query);

if($query and $query->num_rows() == 1)
{
4

4 回答 4

1

您应该检查的所有内容是查询是否返回 0 行或更多行。它不会返回超过由LIMIT子句指定的内容,但如果没有找到匹配项,它可以返回 0。


顺便说一句,MySQLi 只是一个扩展,允许您访问 MySQL 4.1+ 提供的功能。它仍然是 MySQL。

于 2012-07-14T22:44:09.287 回答
0

在 MySQL 中,保证返回的行数不会超过LIMIT子句中指定的行数。您无需担心被给予超过一排。

于 2012-07-14T22:40:39.553 回答
0

由于您的查询WHERE在表的主键上包含一个子句,因此它永远不会返回多于一行。
因此,在这个查询中,LIMIT 1完全没有用(但一点也不错)。

我会删除它。

$query = "SELECT email,auth,username FROM user_list WHERE id = '".$user["id"]."'";
$query = $mysqli->query($query);

if($mysqli->errno==0 and $query->num_rows == 1)
{
于 2012-07-14T22:54:29.343 回答
-2

根本不需要检查行数。您应该只检查查询是否返回了您需要的数据。

$query = $mysqli->query($query);
$single_row = $query->fetch_assoc();

if($single_row) {
    // There was some data returned. 
}

这同样适用于可以返回多行的查询。

$query = $mysqli->query($query);
$data = $query->fetch_all(MYSQLI_ASSOC);

if($data) {
    // There was some data returned. 
}
于 2020-10-05T19:57:19.187 回答