【问题标题】:How do I insert a CURRENT_TIMESTAMP into a PostgreSQL configured Drupal installation如何将 CURRENT_TIMESTAMP 插入到 PostgreSQL 配置的 Drupal 安装中
【发布时间】:2011-04-27 20:12:59
【问题描述】:

我正在使用 drupal 和 pgsql 数据库,但是经过长时间的搜索后,我仍然无法弄清楚在向表中插入一行时如何将 CURRENT_TIMESTAMP 或 now() 放入数据库中。将 now() 放在列的默认值上是行不通的,因为 drupal 不会在数据库架构上接受它,所以这是没有问题的。

当前列类型是“timestamp without timezone”或“time without timezone”,drupal 的架构接受。现在的问题是在那里插入一个日期。

我试过了:

$now = format_date(time(), 'custom', 'Y-m-d H:i:s');

并用字符串占位符“%s”插入它,但是 pgsql 给了我一个错误。

我还尝试将类型更改为整数并使用 time() php 函数插入,但它不起作用(如果它起作用我会在其他表上使用它),所以也许我会坚持使用时间戳按原样输入更有意义。

【问题讨论】:

  • 我不知道drupal,但你检查过'current_timestamp' 不是字符串(不能用引号括起来)吗?如果您将请求作为字符串“现在”发送,则 postgres 允许。
  • 我发现了如何在数据库中添加“now”,就像你说的那样,而不是使用占位符,我只传递一个字符串“now”,它就可以工作了。现在的问题是我想将时间戳从一个表复制到另一个,所以获取它很容易,但是“%s”和“%d”不能作为插入查询的占位符。
  • 当您有时间戳时,您必须将其括在单引号中:'2010-10-10 14:13:22'。
  • 问题是它不是一个已知的字符串时间戳,它在一个变量中。像这样: db_query("INSERT INTO x (that_ol_TS) VALUES ('%unknown_placeholder')", $old_time); $old_time 是我从之前的选择查询中得到的时间戳。
  • 这是我从 drupal 页面得到的错误消息:警告:pg_query() [function.pg-query]:查询失败:错误:类型时间戳的无效输入语法:“”第 3 行:值('www', 'now', 'nothing', '0', '1', '', '') ^ 在 /Applications/MAPPStack/apache2/htdocs/includes/database.pgsql.inc 第 139 行。作为你可以看到,最后两个字段是空的(%s 占位符),这两个是我从另一个表中选择的时间戳(它们是正确的,我可以在 phppgadmin 上看到)

标签: database drupal postgresql timestamp


【解决方案1】:

您可以在下面找到我对问题的 cmets 建议。

  • 您可以将 'now' 用作用单引号括起来的字符串,但 current_timestamp 不应使用引号。
  • 如果您有时间戳,则必须用单引号将其括起来:'2010-10-10 14:13:22'
  • 您收到错误“无效语法”,因为字符串为空。检查变量中是否确实包含某些内容,并且它不是空字符串。
  • 您尝试插入的时间戳缺少日期。

【讨论】:

  • 它缺少日期,因为它被错误地设置为“没有时区的时间”,它应该是“没有时区的时间戳”。变量是空的,因为我忘了取行。 'now' 在 db_query("INSERT...'now' ") 和 drupal_write_record 中都有效(这个函数的好处是你可以忘记占位符)。感谢您的帮助。
  • 没问题,这就是这个网站的全部内容!现在是时候让我睡一会儿了。晚安!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-26
  • 2011-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-24
  • 1970-01-01
相关资源
最近更新 更多