是否有可能在$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 );
我认为规范的方法是使用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
对于使用Wordpress 5.3及以上版本的用户,建议现在使用wp_date,而不是current_time。
wp_date('Y-m-d H:i:s');
因为单词"created"意味着在插入时只需要"NOW()",即当前日期和时间。您可以更改创建的字段
ALTER TABLE `ORDERS_TABLE` CHANGE `created` `created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
并且在query中根本不使用created字段,所以你的新查询将看起来像.
$data = array(
'order' => serialize($_POST['data']['Order']),
'user_id' => $current_user->ID
);
$wpdb->insert(ORDERS_TABLE, (array) $data );
,当你运行你的查询"创建"将采取默认值,它将等于NOW(),你可能已经注意到,我已经省略了"id",以及它也会得到它的默认值,我假设它是自动增加的字段。
目前还不清楚,你可以通过这些SQL函数像NOW()容易使用$wpdb->insert()
方法在WordPress $wpdb
类。
缺少编写类来扩展$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
这是一个古老的话题,但我发现了一个愚蠢的解决方案,在SQL语句之外使用NOW(),它的工作:
$mysql_now = $wpdb->get_row( "SELECT NOW() as dbNow", ARRAY_A );
echo $mysql_now['dbNow'];
不用谢