SQL消毒输出/数据类型错误


SQL Sanitization Output/Datatype Error

我试图清理一些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
        }

我避免使用对象表示法,因为它也不起作用——这看起来更明确了一点,但我并不反对这两种方法。

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

我不经常使用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
    }

好的,所以我发现了一种计算行数和检索数据库输出的方法:

$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