Sql 为什么Perl的DBIx::Class$resultset->update在复杂的搜索查询中失败?
我有一个Perl搜索,如下所示:Sql 为什么Perl的DBIx::Class$resultset->update在复杂的搜索查询中失败?,sql,perl,dbix-class,Sql,Perl,Dbix Class,我有一个Perl搜索,如下所示: my $rs = shift->search( { -and => [ { 'for_revocation' => 1 }, [ { status => { 'not_in' => [ 'revoked', 'revoking']
my $rs = shift->search( {
-and => [
{ 'for_revocation' => 1 },
[
{
status => {
'not_in' => [ 'revoked', 'revoking']
},
},
{
status => 'revoking',
updated => {
'<' => \'now() - interval 1 hour'
}
},
]
]
});
但是我得到了错误
DBI异常:DBD::mysql::st execute
失败:您的SQL中有一个错误
句法;检查手册
对应于您的MySQL服务器
要使用的正确语法的版本
第1行处吊销“1”的“0”附近
[对于语句更新wmv_尝试集
状态=?其中阵列0xADF93A8
对于撤销?使用参数值:
0='revoking',1=1]评估20938
第1行
如果我使用$rs->as_查询来获取用于执行搜索的SQL,它看起来如下所示:
SELECT .... FROM wmv_attempt me WHERE ( ( ( status NOT IN ( ?, ? ) OR ( status = ? AND
updated < now() - interval 1 hour ) ) AND for_revocation = ? ) )
这很好用
当它对resultset进行更新时,似乎无法正确创建WHERE子句
我怀疑这是一个错误
有人能提出我可能做错了什么或其他方法吗
谢谢,Tom你能确认结果集除了更新位是否有效吗?您还可以提到您使用的Perl、DBIx::Class、SQL::Abstract、DBI、DBD::MySQL和MySQL的版本。在irc“dbix类”的帮助下,我通过使用-or=>[]成功地修复了它。他们已经注意到这是一个bug,需要在下一版本中修复。您应该提交自己问题的答案并接受它,以便该问题不在未回答列表中:
SELECT .... FROM wmv_attempt me WHERE ( ( ( status NOT IN ( ?, ? ) OR ( status = ? AND
updated < now() - interval 1 hour ) ) AND for_revocation = ? ) )