Неправильный `оператор обновления` с использованием оператора IN с Zend - PullRequest
2 голосов
/ 29 октября 2011

У меня есть функция, которая предназначена для выполнения оператора, как показано ниже:

UPDATE coupon_users SET status = status | '1' WHERE id IN ('3','4')

И в модели coupon_users я написал метод, подобный приведенному ниже:* Но вопрос всегда такой:

UPDATE coupon_users SET status = status | '1' WHERE id IN ('Array')

Я не знаю, что я здесь не так, пожалуйста, помогите мне, большое спасибо.

Ответы [ 4 ]

4 голосов
/ 03 ноября 2011

Согласно документации PDO (Zend_Db использует PDO в качестве бэкэнда доступа к БД):

Вы не можете привязать несколько значений к одному именованному параметру, для Например, предложение IN () оператора SQL.

Итак, вам, вероятно, нужно немного подготовить свой запрос, чтобы он содержал столько маркеров, сколько элементов в массиве. Возможное решение может быть следующим:

// Compose the query
$queryToExecute = "UPDATE {$this->_name} SET status = status | ? WHERE id IN (";
$questionMarks = array();
for ($id in $ids) {
    $questionMarks[] = '?';
}
$queryToExecute .= implode(',', $questionMarks);
$queryToExecute .= ')';

// $queryToExecute should have the format "UPDATE ... WHERE id IN (?,?,?,...?)"

// Execute it
$result = $this->_db->query(
    $queryToExecute,
    array($status, $ids)
)->execute();

Надеюсь, это поможет,

1 голос
/ 02 ноября 2011

Попробуйте это ..

public function updateStatus(array $ids, $status)
{
    $inarray=   implode(',',$ids);
    $result = $this->_db->query(
        "UPDATE {$this->_name} SET status = status | ? WHERE id IN (?)",
        array(
            $status, 
            $inarray
        )
    )->execute();
    return $result;
}
1 голос
/ 29 октября 2011

try:

public function updateStatus(array $ids, $status)
{
    $result = $this->_db->query(
        "UPDATE {$this->_name} SET status = ? WHERE id IN (?)",
        array(
            $status,
            implode(',',$ids)
        )
    )->execute();
    return $result;
}

Обновление:

Вы пробовали?:

$this->_db->update($this->_name, array('status'=>$status), array('id IN (?)'=>$ids));

Я не тестировал, это также зависит от того, что-> _ db является экземпляром

http://framework.zend.com/manual/en/zend.db.adapter.html#zend.db.adapter.write.update

0 голосов
/ 08 сентября 2017

у меня нормально работает.

     $existingImagesIds = array(1, 2, 3, 7);

     $where = $pImgModel->getAdapter()->quoteInto("id in (?) ", $existingImagesIds);

     $pImgModel->update(array('status' => '0'), $where);
...