我正在为表单进行服务器端验证。使用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中给出的对象
我不太确定这个错误试图告诉我什么。从我的Googled“对象”是对OOP编程方法的引用,但(据我所知)我在这个特定的例子中没有使用OOP概念/原理?或者我误解了这条错误信息?
谢谢。
答案 0 :(得分:7)
不是将$result
传递给mysqli_affected_rows
,而是实际上想要传递数据库链接(由mysqli_connect
返回),这将为您提供受上一个查询影响的行数。参见:
答案 1 :(得分:1)
echo mysqli_affected_rows($dblink);
mysqli对象包含受影响行的计数而不是结果集。 我建议您使用带有OO风格的mysqli或尝试PDO。
答案 2 :(得分:0)
您应该只提供$mysqli_link
(在您的情况下为$dblink
),而不是您编写的代码中的$result
。
答案 3 :(得分:0)
echo mysqli_num_rows($result);
这应该有用。
答案 4 :(得分:0)
您想要选择的行数。
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