SQL清理输出/数据类型错误

时间:2015-03-19 17:53:05

标签: php mysqli

我正在尝试清理某些PHP / SQL代码的输入,但在检查行数时我一直收到以下错误:

  

mysqli_num_rows()期望参数1为mysqli_result

感觉我错过了一个在执行后转换/处理查询的方法,文档中很少有人能够弥补这个差距。假设$ conn是一个正确连接的mysqli数据库调用,这是我的代码:

    $qry = mysqli_prepare($conn,'SELECT * FROM table WHERE attribute=?');
    mysqli_stmt_bind_param($qry,'s',$_SESSION['string']);
    mysqli_stmt_execute($qry);  

    /* Should something go here? */

    if(mysqli_num_rows($qry) > 0)
        {
        //foo
        }

我避免使用对象表示法,因为它也不起作用 - 这只是显得更加明确,但我不反对任何一种方法。

期待听到任何想法 - 提前谢谢你!

2 个答案:

答案 0 :(得分:1)

我不经常使用mysqli,但我认为问题源于你试图针对sql字符串调用mysqli_num_rows()方法的事实。运行execute命令后,将执行结果拉入变量并将其传递给mysqli_num_rows()调用。

// Added this to capture the results of the execution 
$result = mysqli_stmt_get_result($qry);

if(mysqli_num_rows($result) > 0)
    {
    //foo
    }

答案 1 :(得分:0)

好的,所以我能够发现一种计算行数并检索db输出的方法:

$stmt = mysqli_prepare($conn, 'SELECT blah FROM table WHERE attribute=?');
mysqli_stmt_bind_param($stmt,'s',$string);
mysqli_stmt_execute($stmt);
mysqli_stmt_store_result($stmt);
mysqli_stmt_bind_result($stmt,$bindingvar);
mysqli_stmt_fetch($stmt);

if(mysqli_stmt_num_rows($stmt) > 0) {
//foo
}

输出现已分配给$bindingvar

这很麻烦,但它可以完成我想要的所有内容,并且它非常好且程序化。

应该注意的是,这种方法不适用于数据库的多个结果,但考虑到" get_result()"这比没有好。

希望这有帮助!

- M