如何在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;