Zend_Db_Statement_Pdo->使用参数中的表达式执行

发布于 2024-12-27 15:56:56 字数 569 浏览 1 评论 0原文

我尝试使用“重复”部分执行插入语句。据我所知 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”。

搞什么?

I try to execute insert statement with "on duplicate" part. As I know Zend doesn`t support this, so I use simple statement:

$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);

Where $bind - is array:

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

If I try this query through phpMyAdmin - all works fine,
but after script execution the "created" column value is '0000-00-00 00:00:00'.

WTF?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

别念他 2025-01-03 15:56:56

您不能使用表达式作为准备好的语句中占位符的参数。它将被解释为字符串。这与zend框架无关。

您可以在 php 中创建一个格式化的日期字符串并使用它,或者在准备好的语句中使用 now() ,就像

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

另一个解决方案,如果您有时需要提供日期时间,有时需要使用 NOW(),则使用条件来检查具体案例

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

You can't use an expression as an argument to a placeholder in a prepared statement. It will be interpreted as a string. This has nothing to do with zend framework.

You can either created a formatted date string in php and use that, or use now() in the prepared statement like

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

Another solution, if you need to sometimes supply a datetime, and sometimes use NOW(), is using conditionals to check for that specific case

 VALUES(:inn, :name, IF(:created = 'NOW()', NOW(), :created))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文