Wordpress - $wpdb->insert - MySQL NOW()



是否有可能在$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'];

不用谢

最新更新