在准备好的语句中将数组绑定到IN()

时间:2014-04-03 11:51:14

标签: php sql prepared-statement adodb

我有以下代码,应该在我的数据库中更新update_this列,以获取存储在数组中的ID列表:

// id NUMBER
// update_this CHAR(1 CHAR)

$sql = '
    UPDATE my_table
    SET update_this = :update_this
    WHERE id IN(:ids)
';

$binds = array(
    'update_this' => '1',
    'ids' => implode(',', $ids)
);

$db->Execute($sql, $binds);

但是当我运行它时,我以消息“ ORA-01461结束:只能插入一个LONG值才能插入LONG列”。我尝试将ids'ids' => $ids绑定为数组,但后来我失败了“ ORA-01008:并非所有变量绑定”。将数组绑定到IN()的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

@ user2943773明显误解了我的评论:

$ids = array(1,5,123,1000,5236);

$sql = '
    UPDATE my_table
    SET update_this = ?
    WHERE id IN(' . implode(',',array_fill(0, count($ids),'?')) . ')
';

$binds = array('1') + $ids;

$db->Execute($sql, $binds);

答案 1 :(得分:-1)

你能试试吗

$ids = array( '1', '5', '123', '1000', '5236');
$ids = array_combine(range(2, count($ids)+1), $ids);
$ids[1] = 1;  // For update_this
$inQuery = implode(',', array_fill(0, count($ids), '?'));
$sql =  'UPDATE my_table
        SET update_this = ?
        WHERE id IN('.$inQuery.')';
$db->Execute($sql, $ids);