Я работал на Пехлеви и конкретно работал над Zend_Db вполне немного.
нет, нет никакой поддержки API ON DUPLICATE KEY UPDATE
синтаксис. Для этого случая необходимо просто использовать query()
и сформировать полный SQL-оператор сами.
я не рекомендую интерполировать значения в SQL как harvejs шоу. Используйте параметры запроса.
Редактирование: можно постараться не повторять параметры при помощи VALUES()
выражения.
$sql = "INSERT INTO sometable (id, col2, col3) VALUES (:id, :col2, :col3)
ON DUPLICATE KEY UPDATE col2 = VALUES(col2), col3 = VALUES(col3)";
$values = array("id"=>1, "col2"=>327, "col3"=>"active");
@ Билл Карвин: отличные решения! Но было бы лучше, если бы вместо знаков вопросов использовать именованные заполнители (": id", ": col1",…). Тогда вам не нужно дублировать значения с помощью array_marge. Также, если использовать синтаксис «SET» для «INSERT» вместо «VALUES», код становится проще для автоматической генерации для любого набора полей.
$sql = 'INSERT INTO sometable SET id = :id, col2 = :col2, col3 = :col3
ON DUPLICATE KEY UPDATE id = :id, col2 = :col2, col3 = :col3';
В качестве боковой панели вы можете упростить предложение ON DUPLICATE KEY UPDATE
и уменьшить объем обработки, который должен выполнять ваш скрипт, используя VALUES ()
:
$sql = 'INSERT INTO ... ON DUPLICATE KEY UPDATE id = VALUES(id), col2 = VALUES(col2), col3 = VALUES(col3)';
См. http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html для получения дополнительной информации.
вы можете просто сделать что-то вроде этого:
установите уникальный индекс для вашего идентификатора
, а затем
try {
do insert here
} catch (Exception $e) {
do update here
}