【发布时间】: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