Zend_Db_Statement_Pdo-> выполнить с выражением в параметрах - PullRequest
2 голосов
/ 18 января 2012

Я пытаюсь выполнить оператор вставки с частью «на дубликате».Как я знаю, Zend не поддерживает это, поэтому я использую простое утверждение:

$sql = "INSERT INTO agent(`inn`, `name`, `created`) VALUES(:inn, :name, :created) ON      
DUPLICATE KEY UPDATE `inn` = :inn, `name` = :name, `created` = :created";
$stmt = $this->db->prepare($sql);
$stmt->execute($bind);

Где $ bind - это массив:

array(
  'inn'=>1234567890,
  'name'=>'test user', 
  'created' = new Zend_Db_Expr('NOW()')
);

Если я попытаюсьэтот запрос через phpMyAdmin - все работает нормально, но после выполнения скрипта значение «созданного» столбца равно «0000-00-00 00:00:00».

WTF?

1 Ответ

2 голосов
/ 18 января 2012

Вы не можете использовать выражение в качестве аргумента для заполнителя в подготовленном выражении.Это будет интерпретировано как строка.Это не имеет ничего общего с Zend Framework.

Вы можете либо создать отформатированную строку даты в php и использовать ее, либо использовать now () в подготовленном выражении, например

 VALUES(:inn, :name, NOW())

Другое решениеесли вам нужно иногда указывать дату и время, а иногда использовать NOW (), использует условные выражения для проверки этого конкретного случая

 VALUES(:inn, :name, IF(:created = 'NOW()', NOW(), :created))
...