Php Zend_Db无法在(:ids)参数中正确解析
我将Zend_Db与Oracle适配器一起使用,并尝试在Php Zend_Db无法在(:ids)参数中正确解析,php,sql,zend-framework,oracle11g,Php,Sql,Zend Framework,Oracle11g,我将Zend_Db与Oracle适配器一起使用,并尝试在WHERE子句中使用IN()语句执行查询 该语句不会生成任何错误,但也不会执行更新。我试过以下几种形式: $arrLinesCanceled = array('0000000001', '0000000002'); // attempt 1 $db->query( "UPDATE my_table SET STATUS = :status WHERE id IN(:lineIds)", array(
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
Array( [0] => 6617 [1] => 6618)
Oracle 11或Zend_Db适配器不支持这一点吗?我看不出有什么不对…关于,当在SQL语法中使用命名的占位符(那些:占位符)时,您还需要在参数数组中使用准确的占位符名称-也就是说,使用冒号:
:
$db->query(
"UPDATE MOVE_LIST_EMPLOYEE_DETAILS SET STATUS = :status
WHERE MOVE_LIST_DETAIL_ID IN(:lineIds)"
)->execute(array(
':lineIds' => $arrLinesCanceled,
':status' => 'C',
));
你确定$params
数组索引不应该包含冒号:
,比如':lineIds'=>$arrLinesCanceled,
??我确定它在没有它们的情况下也可以工作,而且也不能与它们一起工作。。。我用那个尝试更新了这个问题,但也没用。我们使用它时没有分号,这似乎也行得通。Being说,我也尝试过使用分号,但仍然不起作用。您能为我们提供print\r($arrLinesCanceled)
?也许问题出在别处……我已经把它添加到问题中了