如何在预准备语句中将MySQL函数作为绑定参数传递?

时间:2010-02-09 16:54:27

标签: mysql perl bind dbi

我正在尝试这样做:

$sth = $dbi->prepare('INSERT INTO table VALUES (?, ?, ?)');
$sth->execute(
    $var1,
    $var2 || 'NOW()',
    $var3
);
没有任何运气。有什么想法吗?

3 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:3)

函数不能绑定参数。 MySQL会将它们用引号括起来,这不是有效的语法。

您的选择是:

  • DEFAULT CURRENT_TIMESTAMP - 如果该字段是TIMESTAMP字段,您可以声明它具有当前时间的默认值,如下所示。这不适用于DATETIME字段。
  • 使用perl - $now = time2str('%Y-%m-%d %T', time);

答案 2 :(得分:2)

您也可以使用以下编码。

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