我正在尝试清理某些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
}
我避免使用对象表示法,因为它也不起作用 - 这只是显得更加明确,但我不反对任何一种方法。
期待听到任何想法 - 提前谢谢你!
答案 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