我有一个想要执行如下语句的函数:
UPDATE coupon_users SET status = status | '1' WHERE id IN ('3','4')
在coupon_users
模型中,我写了一个类似下面的方法:
/**
* @param array $ids #array(3,4)
* @param array $status #1
*/
public function updateStatus(array $ids, $status)
{
$result = $this->_db->query(
"UPDATE {$this->_name} SET status = status | ? WHERE id IN (?)",
array(
$status,
$ids
)
)->execute();
return $result;
}
UPDATE coupon_users SET status = status | '1' WHERE id IN ('Array')
我不知道我在这里错了什么,请帮助我,非常感谢。
答案 0 :(得分:4)
根据PDO documentation(Zend_Db使用PDO作为其DB访问后端):
您无法将多个值绑定到for中的单个命名参数 例如,SQL语句的IN()子句。
因此,您可能需要进一步准备查询,以便它包含与数组中元素一样多的标记。可能的解决方案如下:
// 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 :(得分:1)
尝试:
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));
我还没有测试过,它还取决于$ this-> _db是
的实例http://framework.zend.com/manual/en/zend.db.adapter.html#zend.db.adapter.write.update
答案 2 :(得分:1)
试试这个..
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;
}
答案 3 :(得分:0)
它对我来说很好。
$existingImagesIds = array(1, 2, 3, 7);
$where = $pImgModel->getAdapter()->quoteInto("id in (?) ", $existingImagesIds);
$pImgModel->update(array('status' => '0'), $where);