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 传递1true 作为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 获取最后插入的 id

Wordpress“prepare”函数用于插入数据库

使用 WordPress $wpdb 将数据插入到 WordPress 数据库中的表中

Wordpress 更新 mysql 表

安装在函数内部时,Wordpress $wpdb 更新不起作用?

如何在 Wordpress 中插入数据?