当试图绑定params时,我得到错误:“在一个非对象上调用成员函数bind_param()......”这些查询在单独的脚本上运行良好但是当我想运行它们时嵌套我继续得到同样的错误。我已经尝试了很多方法来找到解决方法,但却无法解决。
$mysqli = new mysqli('localhost', 'user', 'pass', 'db');
$ignore_time=time()-(24*60*60);
$stmt=$mysqli->prepare("select id,new_count from view_gallery where lastUpdate< ? and new_count >0");
$stmt->bind_param('i',$ignore_time);
$stmt->execute();
$stmt->bind_result($id, $count);
while($stmt->fetch())
{
$stmt_new=$mysqli->prepare("update gallery set power=power + ? where id= ?");
$power=$count* 0.01;
$stmt_new->bind_param('di',$power,$id);
$stmt_new -> execute();
}
错误在循环内的bind_param行中抛出。
答案 0 :(得分:1)
错误是因为您的prepare()
调用未返回有效对象。这是因为您的SQL查询错误。
在您的查询中,您有power
,这是MySQL中的reserved function keyword。
在查询中使用反引号将其转义,您的代码就可以运行。
$stmt_new = $mysqli->prepare( "UPDATE gallery SET `power` = `power` + ? WHERE `id` = ?" );
使用反引号总是一种很好的做法。
答案 1 :(得分:0)
解决方案是保存外环的结果:
$stmt->store_result();
在while循环之上。