У меня есть вопрос о методе prepare (). У меня есть запрос как этот:
public function updateParam($id, $param, $value){
// Change BDD
$db = Zend_Registry::get("db_foo");
// Prepare query
$insert = $db->prepare(
'INSERT INTO TP_bar (id, type, value)
VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE
value = ?');
// Execute query
$insert->execute(array($id, $param, $value, $value));
}
С этим синтаксом, я должен дублировать значение $ в моем исполнении, есть еще одна проблема, чтобы сделать это без дубликатов?
Спасибо
Вы можете использовать:
ON DUPLICATE KEY UPDATE value = VALUES(value)
Смотрите также документы для MySQL: http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html, в частности:
Вы можете использовать функцию VALUES (col_name) в предложении UPDATE для
обратитесь к значениям столбца из части INSERT INSERT … ON
DUPLICATE KEY UPDATE заявление. Другими словами, VALUES (col_name) в
предложение ON DUPLICATE KEY UPDATE ссылается на значение col_name
который был бы вставлен, если бы не произошло конфликта дубликатов ключей. это
Функция особенно полезна в многорядных вставках. Ценности()
Функция имеет смысл только в операторах INSERT … UPDATE и
в противном случае возвращает NULL. Пример:
INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
Других решений пока нет …