Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在prepared语句中将MySQL函数作为bind参数传递?_Mysql_Perl_Bind_Dbi - Fatal编程技术网

如何在prepared语句中将MySQL函数作为bind参数传递?

如何在prepared语句中将MySQL函数作为bind参数传递?,mysql,perl,bind,dbi,Mysql,Perl,Bind,Dbi,我正在尝试这样做: $sth = $dbi->prepare('INSERT INTO table VALUES (?, ?, ?)'); $sth->execute( $var1, $var2 || 'NOW()', $var3 ); 没有任何运气。有什么想法吗?函数不能绑定参数。MySQL将用无效语法的引号将它们括起来 你的选择是: 默认当前时间戳-如果该字段是时间戳字段,您可以将其声明为默认的当前时间,如下所示。这不适用于日期时间字段 使用perl-

我正在尝试这样做:

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

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

函数不能绑定参数。MySQL将用无效语法的引号将它们括起来

你的选择是:

  • 默认当前时间戳-如果该字段是时间戳字段,您可以将其声明为默认的当前时间,如下所示。这不适用于日期时间字段
  • 使用perl-
    $now=time2str(“%Y-%m-%d%T”,时间)

您也可以使用以下编码

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

+1:聪明。我总是忘记联合。我甚至不知道它在这种情况下会起作用。太好了!谢谢如果我能为“datetime”列设置默认值就好了。请注意,
coalesce
实际上等同于
/
,而不是
|
。但是,如果
$var2
从不包含空字符串或0,那么它可能就足够好了。你一定是在开玩笑。。。为自己计算日期字符串不需要更改语言。首先要记住的是
使用Date::Format$现在=time2str(“%Y-%m-%d%T”,时间),但可能有一种更快/更简单的方法,我已经忘记了。@Dave:啊,你知道我完全忽略了这是一个Perl问题,而不是PHP问题。语法非常相似。我会更新我的问题以符合你的建议。谢谢
$sth = $dbi->prepare('INSERT INTO table VALUES (?, COALESCE(?, NOW()), ?)');
$sth->bind_param($var1,$var2,$var3); 
$sth1=$sth->execute;