2011-12-19 26 views
23

có khả năng sử dụng MySQL NOW() trong cuộc gọi chèn $ wpdb-> không?

Khi tôi sử dụng mã sau, NOW() không hoạt động.

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

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

Chỉ cần làm 'ngày ('Y-m-d H: i: s')' – ceejayoz

+0

Tôi đã nghĩ về điều đó và đã thử nó. Nó hoạt động, nhưng tôi nhận được thời gian trong GMT và không phải là thời gian. NOW() hiện công việc đúng ... – chris

Trả lời

60

tôi tin rằng phương pháp kinh điển là sử dụng WordPress current_time() chức năng đi qua nó 'mysql' như các tham số đầu tiên để xác định một định dạng tương thích mysql timestamp (thay thế là định dạng timestamp UNIX) và '1' như tham số thứ hai để xác định giờ địa phương (mặc định là GMT), như thế này:

$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) đầu ra 2012-07-18 12:51:13.

More đây: http://codex.wordpress.org/Function_Reference/current_time

+1

Phải, 'current_time ('mysql')' là những gì WP sử dụng nội bộ cũng như khi lưu bài viết hoặc trang. – Geert

+8

@coderabbi Chuyển '1' hoặc' true' làm thông số thứ hai cho 'current_time' trả về UTC/GMT, mặc định là giờ địa phương của blog. – Parham

0

Hiện nay đây vẫn là không rõ ràng rằng bạn có thể vượt qua các chức năng SQL như NOW() một cách dễ dàng bằng cách sử dụng phương pháp $wpdb->insert() trong WordPress $wpdb lớp.

Viết ngắn một lớp để mở rộng lớp $wpdb, cách đơn giản nhất tôi có thể thấy là sử dụng phương pháp $wpdb->query() và viết một số mã để chuyển đổi mảng $data thành chuỗi SQL để chuyển sang phương thức.

$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); 

More đây: http://codex.wordpress.org/Class_Reference/wpdb

2

Như chữ "tạo ra" có nghĩa là bạn chỉ cần "NOW()", ngày hiện tại và thời gian, trên chèn. Bạn có thể thay đổi lĩnh vực tạo

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

và không sử dụng lĩnh vực tạo ở tất cả các truy vấn, vì vậy truy vấn mới của bạn sẽ trông giống như ..

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

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

và khi bạn chạy truy vấn của bạn "tạo ra" sẽ có giá trị mặc định, nó sẽ bằng NOW(), bạn có thể nhận thấy rằng tôi đã bỏ qua "id" cũng như nó cũng sẽ nhận được giá trị mặc định của nó, tôi cho rằng đó là trường tăng dần tự động.

-3

Đây là một chủ đề cũ, nhưng tôi tìm thấy một giải pháp ngớ ngẩn cho việc sử dụng NOW() bên ngoài câu lệnh SQL và nó hoạt động:

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

Bạn đang chào đón.

Các vấn đề liên quan