2012-02-29 39 views
6

tôi cần phải thực hiện truy vấn mysql này trong MySQLi PDO với ràng buộc parametr trong PHP:Làm thế nào để chèn bản ghi với hàm MySQL NOW() trong MySQLi với bind_param?

mysql_query("INSERT INTO `posts` (post_name,publish_date) VALUES ($post_name,NOW()) ") 

tôi sử dụng kịch bản như thế này, nhưng nó không chèn PUBLISH_DATE một cách chính xác.

$publish_date = 'NOW()'; 
$insert = $mysqli->prepare("INSERT INTO posts (post_name,publish_date) VALUES (?,?)"); 
$insert->bind_param("ss", $post_name $publish_date); 
$insert->execute(); 

Nó chèn các bản ghi vào cột publish_date như thế này: 0000-00-00 00:00:00

Làm thế nào tôi có thể làm điều này? Cảm ơn trước.

P.S: Loại cột ngày là datatime.

Trả lời

25

Nó không phải là tham số của truy vấn, trong đó bạn không phải cung cấp giá trị cho MySQL.

$insert = $mysqli->prepare("INSERT INTO posts (post_name, publish_date) VALUES (?, NOW())"); 
+2

Ngoài ra: Lý do bạn đang kết thúc với '0000-00-00 00: 00: 00' chèn là bạn đang cố gắng chèn chuỗi '' NOW() ''thay vì giá trị ngày giờ nhận biết được. MySQL coerces chuỗi thành giá trị datetime và giá trị mà nó chọn là ngày không. – Hammerite

+0

Nhưng ... và biến trong bind_param để cung cấp "NOW()" trong bind_param? –

+0

@Pedro, tôi không hiểu câu hỏi của bạn. – Hammerite

2

Có lẽ bạn nên thử sử dụng chức năng cập nhật không VỚI DOANH NGHIỆP()

$publish_date =date("Y-m-d H:i:s"); 
$insert = $mysqli->prepare("INSERT INTO posts (post_name,publish_date) VALUES (?,?)"); 
$insert->bind_param("ss", $post_name $publish_date); 
$insert->execute(); 
+1

Vấn đề với giải pháp này là nếu cơ sở dữ liệu và php không chạy trên cùng một máy chủ, các đồng hồ có thể không được đồng bộ. Điều này có nghĩa là NOW() (mất thời gian từ máy chủ cơ sở dữ liệu) và ngày (mất khoảng thời gian từ php/webserver) không giống nhau. Tôi gặp phải một vài vấn đề vì vấn đề này. Một giải pháp sẽ được đồng bộ tất cả các lần bằng cách sử dụng ntp. – theomega

+0

@theomega đã không thấy rằng nếu cơ sở dữ liệu và php/webserver được trên các máy chủ khác nhau bằng cách sử dụng tập lệnh đồng bộ hóa thời gian ntp sẽ giải quyết vấn đề – smilezjim

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