2010-09-20 2 views
5

Чтобы использовать where в обновлении строки таблицы MySQL в Zend Framework У меня есть что-то вроде:Zend Framework - Обновление базы данных строки с WHERE и AND

public function updateBySiteId(array $data, $id) { 
     $table = $this->gettable(); 

     $where = $table->getAdapter()->quoteInto('site_id = ?', $id); 

     return $table->update($data, $where); 
    } 

и это, я думаю, дает мне что-то вроде .. .

UPDATE foo SET ponies = 'sparkly' WHERE site_id = '1' 

Но что, если я хочу, чтобы создать следующее:

UPDATE foo SET ponies = 'sparkly' WHERE site_id = '1' AND type = 'zombie' 

в руководстве Я не вижу, как это сделать с помощью quoteInto (или цитаты или другого безопасного метода ... что может означать, что я ищу не в том месте, но ... sigh).

ответ

9

Поскольку способ обновления таблицы() прокси к методу адаптера базы данных обновления(), второй аргумент может быть массивом выражений SQL. Выражения объединяются как Булевы термины с использованием оператора AND.

http://framework.zend.com/manual/en/zend.db.table.html

$data = array(
'updated_on'  => '2007-03-23', 
'bug_status'  => 'FIXED' 
); 
$where[] = "reported_by = 'goofy'"; 
$where[] = "bug_status = 'OPEN'"; 
$n = $db->update('bugs', $data, $where); 

Результирующий SQL является:

UPDATE "bugs" SET "update_on" = '2007-03-23', "bug_status" = 'FIXED' WHERE ("reported_by" = 'goofy') AND ("bug_status" = 'OPEN') 

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

+2

Это подействовало. Я прочитал этот бит в руководстве, но неправильно создал массив: $ where = $ table-> getAdapter() -> quoteInto (array ('site_id =?' => $ Id, 'foo' => $ bar)); – Lothar

Смежные вопросы