我有以下变量:
my $search_sql = "select COUNT(*) as COUNT
FROM $this->{KB_OBJECT_PORTFOLIOS} K
WHERE K.TARGET_ID=$target_id
AND K.TARGET_SERVICE_ID=$target_service_id
and K.PARSE_PARAM='$parse_param'
and K.THRESHOLD='$threshold'
and K.`STATUS`='WITHDRAWN';"
当我在调试器中打印时,我得到:
select COUNT(*) ... and K.PARSE_PARAM=\'bkey=9781580536998\' and ...
但我希望得到:
select COUNT(*) ... and K.PARSE_PARAM='bkey=9781580536998' and ...
我怎样才能解读单引号?
答案 0 :(得分:3)
这就是Perl调试器显示字符串的方式。它总是在单引号中显示字符串 - 因此字符串中的任何单引号都需要转义。
但这只是一个显示问题。你的实际字符串没有改变,应该可以正常工作。
我怀疑你猜测是什么导致了你遇到的一些问题。但你猜错了。我认为你需要回到一个级别并解释你想要解决的实际问题。把它放在一个新问题中。
答案 1 :(得分:3)
您的问题的答案是Perl 不随机转义字符串中的字符,只是调试器添加反斜杠以消除其显示的字符串歧义。无论你追逐什么问题都在其他地方
您应该在SQL字符串中使用占位符,并在调用$sth->execute()
当它的表名前面没有引用任何类型的列名时,所以k.status
没问题
看起来像这样
my $search_sql = sprintf <<__END_SQL__, $dbh->quote_identfier($this->{KB_OBJECT_PORTFOLIOS});
SELECT COUNT(*) AS count
FROM %s AS k
WHERE k.target_id = ?,
AND k.target_service_id = ?,
AND k.parse_param = ?,
AND k.threshold = ?,
AND k.status = ?
__END_SQL__
my $sth = $dbh->prepare($search_sql);
$sth->execute($target_id, $target_service_id, $parse_param, $threshold, 'WITHDRAWN');
答案 2 :(得分:-3)
我想我通过使用
找到了答案<<EOF;
符号