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

时间:2012-06-28 00:53:55

标签: php 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

2 个答案:

答案 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']);