0

パラメータをバインドしようとすると、エラーが発生します:「..... の非オブジェクトでメンバー関数 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 行でスローされます。

4

2 に答える 2

1

エラーは、prepare()呼び出しが有効なオブジェクトを返していないためです。これは、SQL クエリが間違っていることが原因です。

クエリには、MySQLの予約関数キーワードpowerである which があります。

クエリでバッククォートを使用してエスケープすると、コードが機能します。

$stmt_new = $mysqli->prepare( "UPDATE gallery SET `power` = `power` + ? WHERE `id` = ?" );

バックティックを使用することは常に良い習慣です。

于 2013-03-11T09:58:10.563 に答える
0

解決策は、外側のループの結果を保存することでした。

$stmt->store_result();

while ループのすぐ上。

于 2013-03-11T10:14:48.460 に答える