Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Zend_Db无法在(:ids)参数中正确解析_Php_Sql_Zend Framework_Oracle11g - Fatal编程技术网

Php Zend_Db无法在(:ids)参数中正确解析

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(

我将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

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)
?也许问题出在别处……我已经把它添加到问题中了