无法在php中按准备好的SQL语句执行SELECT查询
我在测试php文件时遇到此错误:无法在php中按准备好的SQL语句执行SELECT查询,php,mysql,prepared-statement,postman,Php,Mysql,Prepared Statement,Postman,我在测试php文件时遇到此错误:mysqli\u num\u rows()期望参数1为mysqli\u result 这是我的php代码: <?php require "init.php"; if(isset($_POST['username'])){ $username = $_POST['username']; $stmt = "SELECT username FROM users WHERE username = ?"; $result = $dbcon
mysqli\u num\u rows()期望参数1为mysqli\u result
这是我的php代码:
<?php
require "init.php";
if(isset($_POST['username'])){
$username = $_POST['username'];
$stmt = "SELECT username FROM users WHERE username = ?";
$result = $dbcon -> prepare($stmt);
$result->bind_param('s', $username);
$result->execute();
$result->bind_result($username);
$result->fetch();
if(mysqli_num_rows($result)==0){
echo "Result found";
}
else{
echo "NO";
}
}
?>
如果我错了,请纠正我,但我相信我们需要这样的语句来防止SQL注入。检查准备的结果: 请注意,如果不调用store_result,行数通常为零,但在您的情况下,您可以只检查fetch调用的返回值,因此使用
if
加入fetch:
if ($result->fetch()) {
echo "Result found";
} else {
echo "NO";
}
。。。并停止使用num_行
这与您的问题无关,但最好在您不再需要准备好的声明时添加一个结束:
$result->close();
您必须执行
$result->store_result()
在使用$result->num_rows
之前,有一个特殊版本的num_rows for statements:请注意它的使用方式是面向对象的还是过程式的。@fredrover您可以将OO和Proceduralmysqli
混合使用,但我同意它的错误做法
$result->close();