2010-02-09 16 views

cevap

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

+1: akıllı. Ben her zaman birleşmeyi unutalım. Bu bağlamda çalışacağını bile bilmiyordum. – hobodave

+0

Güzel! Teşekkürler. Yalnızca 'datetime' sütunları için varsayılan bir değer ayarlayabilirsem. – aidan

+1

"Birleşme" nin, // || değil, '||' ile eşdeğer olduğuna dikkat edin. Ancak, $ var2' hiçbir zaman boş dize veya 0 içermiyorsa, yaptığınız şey için yeterince iyi olabilir. – cjm

3

İşlevler, bağlı parametreler olamaz. MySQL onları geçerli sözdizimi olmayan tırnak içine alacak.

Seçenekleriniz şunlardır:

  • DEFAULT CURRENT_TIMESTAMP - alan bir TIMESTAMP alandır Eğer böyle şimdiki zamanın bir varsayılan olması bildirebilirsiniz. Bu, DATETIME alanları için çalışmaz.
  • Kullanım perl - $now = time2str('%Y-%m-%d %T', time);
+0

Şaka yapıyor olmanız gerekir ... Tarih dizgisini çalışmak kendiniz için dilleri değiştirmenizi gerektirmez. Akla ilk gelen şey; Tarih :: Biçimini kullanmak; $ now = time2str ('% Y-% m-% d% T', zaman); ', ama muhtemelen daha önce unuttuğum bunu yapmak için daha hızlı/kolay bir yolu var. –

+0

@Dave: Ah, bilirsin, bir şekilde bu bir Perl sorusu ve bir PHP sorusu değildi. Sözdizimi çok benzer. Sorumu önerinize uyacak şekilde güncelleyeceğim. Teşekkürler. – hobodave

2

Ayrıca aşağıdaki kodlama kullanabilirsiniz.

$sth = $dbi->prepare('INSERT INTO table VALUES (?, COALESCE(?, NOW()), ?)'); 
$sth->bind_param($var1,$var2,$var3); 
$sth1=$sth->execute; 
İlgili konular