我正在使用Perl的DBI和SQLite。
问题是当使用selectrow_hashref
时,通过传入值bind_value
。我有一个字段是Julian Date。当我直接将日期的值放入调用中时,它可以工作。如果我尝试在bind_value中使用该值,则不起作用。我知道我很接近了,因为当我使用不同的键进行查询时,我可以使用bind_value。你可以在下面的调试器中看到代码。
有什么建议吗?
这是可行的:
DB<20> $hash_ref = $dbh->selectrow_hashref("select * from run_data where date = '$date'")
DB<21> x $hash_ref
0 HASH(0x3e8ad28)
'date' => '2014-09-17 17:35:28'
'kit' => '15.1.0.40'
'run_id' => 1
这一个没有,只是添加了?
并将日期移动到bind_value:
DB<22> $hash_ref = $dbh->selectrow_hashref("select * from run_data where date = '?'", undef, $date)
DB<23> x $hash_ref
0 undef
DB<24>
这是可行的,但它使用的是一个整数键:
DB<24> $hash_ref = $dbh->selectrow_hashref("select * from run_data where run_id = ?", undef, 1)
DB<25> x $hash_ref
0 HASH(0x3e8b0d0)
'date' => '2014-09-17 17:35:28'
'kit' => '15.1.0.40'
'run_id' => 1
更新
在睡觉之后,我发现bind_value是一个数组,所以我试了一下:
$hash_ref = $dbh->selectrow_hashref("select run_id from run_data where date = ?", undef, ($date));
这样就行了。所以不要用引号,确保我用的是数组。
我现在很好奇为什么$DBI::errstr没有值,你会认为数据格式不正确。我将尝试运行RaiseError,看看会发生什么。
2条答案
按热度按时间4dc9hkyq1#
'?'
表示“由字符?
组成的字符串。去掉引号。vwoqyblh2#
尝试类似的东西: