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


Bind array to IN() in prepared statement

我有以下代码,它应该更新数据库中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()的正确方法是什么?

@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);

你能试试这个吗

$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);