我正在为表单进行服务器端验证。使用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);
这应该行得通。