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