无法在php中按准备好的SQL语句执行SELECT查询

无法在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

我在测试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 -> 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和Procedural
mysqli
混合使用,但我同意它的错误做法
$result->close();