代码之家  ›  专栏  ›  技术社区  ›  aidan

如何在准备好的语句中传递mysql函数作为绑定参数?

  •  7
  • aidan  · 技术社区  · 14 年前

    我想这样做:

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

    没有任何运气。有什么想法吗?

    3 回复  |  直到 14 年前
        1
  •  14
  •   Quassnoi    14 年前
    $sth = $dbi->prepare('INSERT INTO table VALUES (?, COALESCE(?, NOW()), ?)');
    $sth->execute(
        $var1,
        $var2,
        $var3
    );
    
        2
  •  3
  •   hobodave    14 年前

    函数不能是绑定参数。MySQL将它们括在引号中,这是无效的语法。

    您的选择是:

    • 默认当前时间戳-如果该字段是时间戳字段,则可以将其声明为当前时间的默认值,如下所示。这不适用于日期时间字段。
    • 使用Perl $now = time2str('%Y-%m-%d %T', time);
        3
  •  2
  •   muruga    14 年前

    您也可以使用以下编码。

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