仅在具有 PDO 的服务器上出错:“只能通过引用传递变量”/“无法通过引用 pdo 传递参数 2”


Error only on server with PDO: "Only variables can be passed by reference"/"Cannot pass parameter 2 by reference pdo"

尝试遍历服务器上的数组以将语句与PDO绑定时,我收到以下错误:

"只能通过引用传递变量"或"无法通过引用 pdo 传递参数 2"

在我的本地 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
你应该

使用 bindValue 作为纯输入参数。bindParam 方法保留用于绑定变量,这些变量可用作输入,但也返回查询结果(输出)。

虽然这并不能解释你的问题。但我们不知道您的数组包含什么。
这肯定不是密钥生成/串联。

感觉你把事情复杂化了...为什么不直接将数组传递给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']);