Wordpress - $wpdb->插入 - MySQL NOW()
Posted
技术标签:
【中文标题】Wordpress - $wpdb->插入 - MySQL NOW()【英文标题】:Wordpress - $wpdb->insert - MySQL NOW() 【发布时间】:2012-01-23 21:28:03 【问题描述】:是否有可能在 $wpdb->insert 调用中使用 mysql NOW()?
当我使用以下代码时,NOW() 不起作用。
$data = array(
'id' => NULL,
'order' => serialize($_POST['data']['Order']),
'created' => NOW(),
'user_id' => $current_user->ID
);
$wpdb->insert(ORDERS_TABLE, (array) $data );
【问题讨论】:
随便date('Y-m-d H:i:s')
我想到了那个,也试过了。它有效,但我得到的是格林威治标准时间,而不是应该的时间。 NOW() 做得对...
【参考方案1】:
目前尚不清楚您是否可以使用 WordPress $wpdb
类中的 $wpdb->insert()
方法轻松传递这些 SQL 函数,如 NOW()。
没有写一个类来扩展$wpdb
类,我能看到的最直接的方法是使用$wpdb->query()
方法并编写一些代码将您的$data
数组转换为SQL 字符串以传递给方法。
$sql = sprintf(
'INSERT INTO table (id, order, created, user_id) VALUES (%d, %d, %s, %d)',
$data[id], $data['order'], $data['created'], $data['user_id']
);
$wpdb->update( $sql );
更多:http://codex.wordpress.org/Class_Reference/wpdb
【讨论】:
【参考方案2】:我相信规范的方法是使用 WordPress current_time()
函数将它作为第一个参数传递 'mysql' 来指定 mysql 时间戳兼容格式(替代方案是 UNIX 时间戳格式)和 '1' 作为第二个参数指定 GMT 时间(默认为本地时间),如下所示:
$data = array(
'id' => NULL,
'order' => serialize($_POST['data']['Order']),
'created' => current_time('mysql', 1),
'user_id' => $current_user->ID
);
$wpdb->insert(ORDERS_TABLE, $data);
current_time('mysql', 1)
输出2012-07-18 12:51:13
。
更多:http://codex.wordpress.org/Function_Reference/current_time
【讨论】:
对,current_time('mysql')
是 WP 在内部保存帖子或页面时使用的。
@coderabbi 传递1
或true
作为current_time
的第二个参数返回UTC/GMT,默认为博客本地时间。
current_time('mysql') 或较新的 wp_date() 函数可以工作,但不会像 now(6) 那样给出微秒?真的希望 wpdb 插入方法支持本机 SQL 函数 - 可能在格式数组中使用其他格式字符而不是 %s?使用插入语句进行 wpdb 查询,包括对每个值的转义,除了 now(6)...
这是否使用数据库作为权威时间源.. 例如,wordpress 安装上的“现在”可能与数据库上的“现在”不同,例如,如果数据库是托管的在不同的服务器上【参考方案3】:
“created”一词意味着您在插入时只需要“NOW()”,即当前日期和时间。您可以更改创建的字段
ALTER TABLE `ORDERS_TABLE` CHANGE `created` `created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
并且不要在查询中使用 created 字段,所以你的新查询看起来像..
$data = array(
'order' => serialize($_POST['data']['Order']),
'user_id' => $current_user->ID
);
$wpdb->insert(ORDERS_TABLE, (array) $data );
当你运行你的查询“created”将采用默认值,它将等于NOW(),你可能已经注意到我省略了“id”,它也会得到它的默认值,我假设它是自动递增的字段。
【讨论】:
【参考方案4】:这是一个老话题,但我发现了一个在 SQL 语句之外使用 NOW() 的愚蠢解决方案,并且它有效:
$mysql_now = $wpdb->get_row( "SELECT NOW() as dbNow", ARRAY_A );
echo $mysql_now['dbNow'];
不客气。
【讨论】:
【参考方案5】:对于使用 Wordpress 5.3 及更高版本的任何人,the recommended approach 现在将使用 wp_date,而不是 current_time。
wp_date('Y-m-d H:i:s');
【讨论】:
以上是关于Wordpress - $wpdb->插入 - MySQL NOW()的主要内容,如果未能解决你的问题,请参考以下文章
使用 WordPress $wpdb 将数据插入到 WordPress 数据库中的表中