1

サーバー上の配列をループしてステートメントをPDOにバインドしようとすると、次のエラーが発生します。

「変数のみを参照で渡すことができます」または「パラメーター2を参照で渡すことはできませんpdo」

ローカルのXAMPPで正常に動作します。

コード:

$sql = rest of sql query etc.

$loop = 1;
foreach ($animal_array $ani)
{
    if ($loop == 1) {$sql .= " WHERE animal.id= :animal_id".$loop; }
    else            {$sql .= " OR animal.id= :animal_id".$loop;}
    $loop++;
}   

$stmt = $crud->db->prepare($sql);

$loop = 1;
foreach ($animal_array as $ani)
{   
    $stmt->bindParam(':animal_id'.$loop, $ani['animal_id'], PDO::PARAM_STR);
    $loop++;
}

また、私がどこかで連結が時々好まれないことを読んだので、これを最後に試しました:

foreach ($animal_array as $ani)
{   
    $ref = ":animal_id".$loop;
    $stmt->bindParam($ref, $ani['animal_id'], PDO::PARAM_STR);
    $loop++;
}

編集: 配列には、次のような他の値が含まれています:

$animal_array['animal_id'];
$animal_array['name'];
$animal_array['colour'];
$animal_array['quantity']; etc
4

2 に答える 2

2

bindValue純粋な入力パラメータに使用する必要があります。このbindParamメソッドは、入力として使用できるだけでなく、クエリ結果(出力)を返す変数をバインドするために予約されています。

それはあなたの問題を説明していませんが。しかし、アレイに何が含まれているのかはわかりません。
それは確かにキーの生成/連結ではありません。

于 2012-06-28T01:02:00.130 に答える
1

問題を複雑にしすぎているように感じます...配列をexecute直接に渡してみませんか?

$sql .= 'WHERE animal.id IN ('
     .     '?'.str_repeat(',?', count($animal_array['animal_id'])-1)
     .  ')';

$qry = $crud->db->prepare($sql);
$qry->execute($animal_array['animal_id']);
于 2012-06-28T01:03:13.520 に答える