2010-02-09 25 views

Trả lời

14
$sth = $dbi->prepare('INSERT INTO table VALUES (?, COALESCE(?, NOW()), ?)'); 
$sth->execute(
    $var1, 
    $var2, 
    $var3 
); 
+0

+1: thông minh. Tôi luôn quên về sự kết hợp. Tôi thậm chí không biết nó sẽ làm việc trong bối cảnh này. – hobodave

+0

Đẹp! Cảm ơn. Nếu chỉ tôi mới có thể đặt giá trị mặc định cho cột 'datetime'. – aidan

+1

Lưu ý rằng 'coalesce' thực sự tương đương với' // ', không phải' || '. Tuy nhiên, nó có thể đủ tốt cho những gì bạn đang làm, nếu '$ var2' không bao giờ chứa chuỗi rỗng hoặc 0. – cjm

3

Các tham số không thể bị ràng buộc. MySQL sẽ kèm theo chúng trong các dấu ngoặc kép không phải là cú pháp hợp lệ.

lựa chọn của bạn là:

  • DEFAULT CURRENT_TIMESTAMP - Nếu trường là một lĩnh vực dấu thời gian bạn có thể khai báo nó có một mặc định của thời điểm hiện tại như thế này. Điều này không hoạt động cho các trường DATETIME.
  • Sử dụng perl - $now = time2str('%Y-%m-%d %T', time);
+0

Bạn phải đùa ... Làm việc chuỗi ngày của chính bạn không yêu cầu bạn thay đổi ngôn ngữ. Điều đầu tiên cần lưu ý là 'sử dụng Date :: Format; $ now = time2str ('% Y-% m-% d% T', thời gian); ', nhưng có lẽ một cách nhanh hơn/dễ dàng hơn để làm điều đó ngoài kia mà tôi đã quên. –

+0

@Dave: Ah, bạn biết tôi bằng cách nào đó đã bỏ lỡ hoàn toàn rằng đây là một câu hỏi Perl, và không phải là một câu hỏi PHP. Cú pháp rất giống nhau. Tôi sẽ cập nhật câu hỏi của tôi để phù hợp với đề xuất của bạn. Cảm ơn. – hobodave

2

Bạn có thể sử dụng mã hóa sau đây cũng có.

$sth = $dbi->prepare('INSERT INTO table VALUES (?, COALESCE(?, NOW()), ?)'); 
$sth->bind_param($var1,$var2,$var3); 
$sth1=$sth->execute; 
Các vấn đề liên quan