我尝试使用“on duplicate”部分执行insert语句。我知道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尝试此查询 - 一切正常, 但在脚本执行后,“created”列值为'0000-00-00 00:00:00'。
WTF?
答案 0 :(得分:2)
您不能将表达式用作预准备语句中占位符的参数。它将被解释为一个字符串。这与zend框架无关。
你可以在php中创建一个格式化的日期字符串并使用它,或者在准备好的语句中使用now(),如
VALUES(:inn, :name, NOW())
另一种解决方案,如果你有时需要提供日期时间,有时候使用NOW(),则使用条件来检查特定情况
VALUES(:inn, :name, IF(:created = 'NOW()', NOW(), :created))