【发布时间】:2013-11-01 22:11:02
【问题描述】:
我将 Zend_Db 与 Oracle 适配器一起使用,并尝试在 WHERE 子句中使用 IN() 语句执行查询。
该语句不会产生任何错误,也不会执行更新。我尝试了以下形式:
$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',
));
为确保输入正确,这是$arrLinesCanceled 的实际print_r
Array( [0] => 6617 [1] => 6618)
Oracle 11 或 Zend_Db 适配器不支持吗?我看不出有什么问题...
【问题讨论】:
-
您确定
$params数组索引不应包含冒号:,例如':lineIds' => $arrLinesCanceled,??? -
我敢肯定,没有它们它也可以工作,而且它也不能与它们一起工作......我已经用那个尝试更新了这个问题,它也没有工作。
标签: php sql zend-framework oracle11g