1

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