2011-12-19 52 views
23

有沒有可能在$ 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); 
+0

只是做'日期('Y-m-d H:我:S')' – ceejayoz 2011-12-19 19:46:33

+0

我想過那個,也試過了。它有效,但我在格林尼治標準時間得到的時間,而不是它應該的時間。 NOW()完成這項工作... – chris 2011-12-19 19:49:31

回答

60

我相信規範的方法是使用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

+1

對,'current_time('mysql')'是WP在內部保存帖子或頁面時使用的內容。 – Geert 2012-10-30 10:51:56

+8

@coderabbi傳遞'1'或'true'作爲'current_time'的第二個參數返回UTC/GMT,默認爲博客的本地時間。 – Parham 2013-09-21 17:50:39

0

目前這仍是不明確的,你可以通過這些SQL功能,如NOW()易於採用WordPress的$wpdb類中$wpdb->insert()方法。

短寫一個類來擴展$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

爲「創造」這個詞意味着你只需要「NOW()」,當前日期和時間,在插入。您可以更改創建

ALTER TABLE `ORDERS_TABLE` CHANGE `created` `created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 

領域,並沒有使用創建的所有在查詢字段,因此新的查詢將看起來像..

$data = array(  
    'order' => serialize($_POST['data']['Order']),   
    'user_id' => $current_user->ID 
); 

$wpdb->insert(ORDERS_TABLE, (array) $data); 

,當您運行查詢「創造」將採用默認值,它將等於NOW(),您可能已經注意到我已經省略了「id」以及它也會得到它的默認值,我假設它是自動遞增的字段。

-3

這是一個老話題,但我發現一個愚蠢的解決方案使用NOW()SQL語句之外,它的工作原理:

$mysql_now = $wpdb->get_row("SELECT NOW() as dbNow", ARRAY_A); 
echo $mysql_now['dbNow']; 

歡迎您。