gpt4 book ai didi

sql - DBI 准备好的语句 - 绑定(bind)十六进制通配符字符串

转载 作者:行者123 更新时间:2023-12-04 23:22:00 24 4
gpt4 key购买 nike

我对 Perl 很陌生,而且我被 DBI 的错误难住了。我正在尝试查询由其十六进制值定义的一系列字符:

my @compare = ( '\'%\'+x\'0A\'+\'%\'',
'\'%\'+x\'92\'+\'%\'',
'\'%\'+x\'96\'+\'%\'',
'\'%\'+x\'A0\'+\'%\'' );

my $fetch_bad_rows = $dbh->prepare( qq{
SELECT B.* FROM ... AS B
WHERE B. ... LIKE ?
OR B. ... LIKE ?
OR B. ... LIKE ?
OR B. ... LIKE ?
});

$fetch_bad_rows->execute(@compare)

my $counter;
for( $counter = 0; $fetch_bad_rows->fetch; $counter++ ) {};
print LOG sprintf("Found %d bad rows\n", $counter);

以这种方式执行语句会找到 0 行。但是,如果我对查询中的字符串进行硬编码,则会得到 437 条记录:
my $fetch_bad_rows = $dbh->prepare( qq{
SELECT B.* FROM ... AS B
WHERE B. ... LIKE '%'+x'0A'+'%'
OR B. ... LIKE '%'+x'92'+'%'
OR B. ... LIKE '%'+x'96'+'%'
OR B. ... LIKE '%'+x'A0'+'%'
});

$fetch_bad_rows->execute

我无法弄清楚我在传递绑定(bind)值时做错了什么。

有人有想法么?提前致谢。

最佳答案

?prepare将确保一切都逃脱。所以如果你传入的东西有 '它会转义引号:

'\'%\'+x\'0A\'+\'%\''

可以更容易地写成:
q{'%'+x'0A'+'%'}

将变成:
... LIKE '\'%\'+x\'0A\'+\'%\''

因此它什么也找不到。

关于sql - DBI 准备好的语句 - 绑定(bind)十六进制通配符字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22302709/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com