Zend_Db无法正确解析IN(:ids)参数

时间:2013-10-23 14:46:54

标签: php sql zend-framework oracle11g

我正在使用Zend_Db和Oracle适配器,我正在尝试使用IN()子句中的WHERE语句执行查询。

该语句不会生成任何错误,但也不会执行更新。我尝试过以下表格:

$arrLinesCanceled = array('0000000001', '0000000002');

// attempt 1
$db->query(
    "UPDATE my_table SET STATUS = :status WHERE id IN(:lineIds)",
    array(
        'lineIds' => $arrLinesCanceled,
        'status' => 'C',
))->execute();

// attempt 2 (this actually errors out with 'not all parameters are bound')
$db->query(
    "UPDATE my_table SET STATUS = :status WHERE id IN(:lineIds)"
)->execute(array(
    'lineIds' => $arrLinesCanceled,
    'status' => 'C',
));

// attempt 3
$stmtUpdateDetailStatus = $db->prepare(
    "UPDATE my_table SET STATUS = :status WHERE id IN(:lineIds)");

$stmtUpdateDetailStatus->execute(array(
    'lineIds' => $arrLinesCanceled,
    'status' => 'C',
));

// last, very desperate attempt
$db->query("UPDATE my_table SET STATUS = :status WHERE id IN(:lineIds)", array(
    ':lineIds' => $arrLinesCanceled,
    ':status' => 'C',
))->execute(array(
    ':lineIds' => $arrLinesCanceled,
    ':status' => 'C',
));

确保输入正确,这是print_r

的实际$arrLinesCanceled
Array( [0] => 6617 [1] => 6618)

Oracle 11或Zend_Db适配器是否不支持此功能?我看不出有什么不对......

1 个答案:

答案 0 :(得分:0)

关于documentation,在您的SQL语法中使用命名占位符(那些 :placeholder )时,您需要使用确切的占位符名称也在参数数组中 - 也就是说,也使用冒号:

$db->query(
    "UPDATE MOVE_LIST_EMPLOYEE_DETAILS SET STATUS = :status 
     WHERE MOVE_LIST_DETAIL_ID IN(:lineIds)"
)->execute(array(
    ':lineIds' => $arrLinesCanceled,
    ':status' => 'C',
));