尝试遍历服务器上的数组以将语句与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']);