如何正确表示Perl的DBI中的空格

时间:2013-10-28 16:12:52

标签: perl informix dbi dbaccess

我在Informix表中有一条记录。表格列如下所示:

acct_no integer,
suffix char(1),
meter_num char(20),
date_read datetime year to second not null ,
counter smallint,
reading integer not null ,
typeofread char(1),
estimated char(1),
time_billed datetime year to second

使用Informix的dbaccess工具:

select * 
from ws_mtrread 
where acct_no = 113091000 
and suffix = " " 
order by date_read desc;

返回此结果(最新显示)并且无论我是否使用一个或两个空格作为后缀,都会起作用。

acct_no      113091000
suffix
meter_num    34153205
date_read    2013-09-09 23:31:15
counter      0
reading      1240
typeofread   g
estimated
time_billed  2013-10-22 11:48:21

但是,这个Perl DBI查询

my $sql_statement = 
"select * ".
"from ws_mtrread ".
"where acct_no = ? ".
"and suffix = ? ".
"order by date_read desc ; ";

不起作用。我可以在不指定$ suffix的情况下获取行,因此我知道该行存在。

我认为这是代表后缀的错误。在此示例中,后缀等于两个空格的字符串。

如何正确表示空格,以便查询有效?这是我用来获取行的其余代码。

my $test_acct_no = 113091000;
my $suffix = "  ";

my $pt_sel_hdl = $DBHdl->prepare($sql_statement);

$pt_sel_hdl->execute($test_acct_no, $DBHdl->quote($suffix));

my $ws_mtr_read_rec_ref = $pt_sel_hdl->fetchrow_hashref;

通话结束后,$ ws_mtr_read_rec_ref未定义。

1 个答案:

答案 0 :(得分:4)

不要在这里使用DBI的quote方法:

$pt_sel_hdl->execute($test_acct_no, $DBHdl->quote($suffix));

在SQL中使用?占位符时,数据库驱动程序将正确地参数化您传递给execute的查询参数。当您要搜索" "(仅两个空格)时,您可能正在创建一个搜索文字字符串(包括引号)的查询。

所以这应该是你所需要的:

$pt_sel_hdl->execute($test_acct_no, $suffix);