【问题标题】:Zend_Db does not correctly parse IN(:ids) parameterZend_Db 没有正确解析 IN(:ids) 参数
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • 我们在任何地方都使用它而不使用分号,这似乎也有效。话虽如此,我也试过用分号,但还是不行。
  • 你会这么好心并为我们提供print_r($arrLinesCanceled)吗?也许问题出在其他地方......
  • 我已将其添加到问题中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-30
  • 2021-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多