如何从SELECT查询中获取行数?错误:mysqli_affected_rows()要求参数1为给定对象的mysqli


How to get the number of rows from a SELECT query? Error: mysqli_affected_rows() expects parameter 1 to be mysqli, object given

我正在为表单进行服务器端验证。使用AJAX,表单将"username"输入字段中的值发送到我的php页面,然后检查该用户名是否已存在于数据库中。

这是我的php代码:

$result = mysqli_query($dblink, "SELECT * FROM users WHERE `username` = '$regname'") 
or die(mysqli_error($dblink));
echo mysqli_affected_rows($result);

*(目前,我正在对mysqli_affected_rows进行简单的回显,只是想看看我的MySQL查询是否按预期工作)*

我得到的错误是:

警告:mysqli_affected_rows()要求参数1为mysqli,在第20行/Users/test/Sites/proj/formvalidate.php中给定的对象

我不太确定这个错误是想告诉我什么。根据我在谷歌上搜索的"对象"是对OOP编程方法的引用,但(据我所知)我在这个特定的例子中没有使用OOP概念/原理?或者我误解了这个错误信息?

谢谢。

您实际上想要传递DB链接(由mysqli_connect返回),而不是将$result传递给mysqli_affected_rows,它将为您提供受上一个查询影响的行数。参见:

http://uk.php.net/mysqli_affected_rows

echo mysqli_affected_rows($dblink);

mysqli对象包含受影响行的计数,而不是结果集。我建议您使用OO风格的mysqli或尝试PDO。

您应该在编写的代码中只给出$mysqli_link(在您的情况下是$dblink),而不是$result

您需要选择的行数。

mysqli::$affected_rows应用于INSERT、UPDATE、REPLACE或DELETE查询(affected_rows PHP.net)

对于SELECT查询(您想要的),有mysqli_result::$num_rows(num_rows PHP.net)。如您所见,应该在SELECT查询的结果上使用num_rows。

您想要的是echo mysqli_num_rows ( $result ),它提供了所选行的数量。

两者的用法示例:

$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
$mysqli->query("CREATE TABLE Language SELECT * from CountryLanguage");
echo "Affected rows (INSERT): " . $mysqli->affected_rows; // $mysqli is the link variable to the DB
$result = $mysqli->query("SELECT Code, Name FROM Country ORDER BY Name");
echo "Selected rows: " . $result->num_rows; // Here we use the $result variable from the query
echo mysqli_num_rows($result);

这应该行得通。