无法在php中执行SELECT QUERY as PREPARED SQL STATEMENT

时间:2016-02-09 23:28:57

标签: php mysql prepared-statement postman

我测试我的php文件时遇到此错误:mysqli_num_rows() expects parameter 1 to be mysqli_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注入。

1 个答案:

答案 0 :(得分:0)

检查准备的结果:

$result = $dbcon -> prepare($stmt) or die ($dbcon->error());

请注意,如果不调用 store_result ,行数通常为零,但在您的情况下,您只需检查 fetch 调用的返回值,请使用if

加入抓取
if ($result->fetch()) {
   echo "Result found";
} else {
    echo "NO";
}

...并放弃使用 num_rows

这与您的问题无关,但是一旦您不再需要准备好的语句,最好添加 close

$result->close();