sql - 没有使用 SQL::Statement 正确解析 WHERE 子句中的 IN
问题描述
我正在使用此处提供的示例的略微修改版本:https ://metacpan.org/pod/distribution/SQL-Statement/lib/SQL/Statement/Structure.pod
use SQL::Statement;
use Data::Dumper;
my $sql = q{
SELECT c1
, col2 as c2
, c3
FROM table1 t1, table2 t2
WHERE t1.c1 = t2.c2
and t1.c1 in (11111, 22222, 33333)
GROUP by t1.c1
};
my $parser = SQL::Parser->new('ANSI');
$parser->{RaiseError}=1;
$parser->{PrintError}=0;
my $stmt = SQL::Statement->new($sql, $parser);
print Dumper($stmt->where_hash());
但是当我这样做时,我得到了这个没有意义的错误,因为它是一个非常常见的构造:
Bad table or column name: '11111,22222,33333' has chars not alphanumeric or underscore! at /home/palert/perl5/perlbrew/perls/perl-5.28.1/lib/site_perl/5.28.1/SQL/Statement.pm line 90.
我错过了什么?
解决方案
私下向维护者发送邮件,而不是检查未解决的问题或阅读https://metacpan.org/pod/SQL::Statement#Where-can-I-go-for-help?仔细并没有显示您在自己解决问题上投入了多少时间。
Polar Bear从 SQL::Statement 的角度给了你正确的答案。我知道它有怪癖,但它是一个 20 岁的 Perl5 模块,因此它不使用新的花哨抽象,如通过 Moose 或 wtf 的类型系统。
OTOH - 你可以按照推荐使用占位符,以太告诉你。比您在执行时传递值,而不是在解析期间传递值。
推荐阅读
- c++ - 使用 Dijkstra 算法的最小生成树
- mysql - 改进 MySQL 的问题。(innodb_log_file_size)
- zend-framework - 如何在一对一的学说中将引用的密钥 ID 更新为 null
- aframe - a-frame ar 的纹理图像中存在错误
- java - 在java中使用.properties文件中的引用合并字符串
- dart - 如何添加两个列表作为键值对?
- html - 无法在同一行显示页码
- angularjs - 两个具有不同信息的 angularjs 窗口
- wso2 - Swagger 定义位于 WSO2 身份服务器上的 Scim2 的什么位置
- javascript - 单击按钮时调用 AngularJS 函数不起作用