当我尝试在服务器上循环数组以使用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
答案 0 :(得分:2)
您应该使用bindValue
作为纯输入参数。 bindParam
方法保留用于绑定变量,可用作输入,但返回查询结果(输出)。
虽然这并不能解释你的问题。但是我们不知道你的数组包含什么 这肯定不是密钥生成/连接。
答案 1 :(得分: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']);