2010-02-09 66 views

回答

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

+1:聰明。我總是忘記凝聚。我甚至不知道它會在這方面起作用。 – hobodave 2010-02-09 17:02:09

+0

不錯!謝謝。如果只有我可以設置'日期時間'列的默認值。 – aidan 2010-02-09 17:03:49

+1

請注意'coalesce'實際上等同於'//',而不是'||'。但是,如果'$ var2'從不包含空字符串或0,它可能足以滿足您的要求。 – cjm 2010-02-09 20:29:35

3

函數不能綁定參數。 MySQL將把它們用引號括起來,這是不合法的語法。

的選項有:

  • DEFAULT CURRENT_TIMESTAMP - 如果該字段是一個時間戳字段,你可以聲明它有當前時間這樣的默認值。這不適用於DATETIME字段。
  • 使用Perl - $now = time2str('%Y-%m-%d %T', time);
+0

你一定是在開玩笑......爲自己設計日期字符串並不需要你改變語言。首先要介意的是'use Date :: Format; $ now = time2str('%Y-%m-%d%T',time);',但是可能有一種更快更簡單的方法來完成它,我忘記了。 – 2010-02-10 11:49:38

+0

@Dave:啊,你知道我完全錯過了這是一個Perl問題,而不是PHP的問題。語法如此相似。我會更新我的問題以符合您的建議。謝謝。 – hobodave 2010-02-10 18:38:53

2

您可以使用下面的代碼也。

$sth = $dbi->prepare('INSERT INTO table VALUES (?, COALESCE(?, NOW()), ?)'); 
$sth->bind_param($var1,$var2,$var3); 
$sth1=$sth->execute; 
相關問題