我使用Perl的DBI和sqlite。
问题在于通过使用bind_value传递值来使用selectrow_hashref。我有一个朱利安日期的领域。当我将日期的值直接放入调用中时,它可以正常工作。如果我尝试在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
$hash_ref = $dbh->selectrow_hashref("select run_id from run_data where date = ?", undef, ($date));
这是有效的。所以没有引号,并确保我使用数组。
我很好奇为什么$ DBI :: errstr没有值,你会认为数据格式不正确。我将尝试使用RaiseError运行,看看会发生什么。
答案 0 :(得分:1)
'?'
表示&#34;由字符?
组成的字符串。删除引号。
my $hash_ref = $dbh->selectrow_hashref(
"select * from run_data where date = ?", undef, $date);
答案 1 :(得分:0)
尝试类似的事情:
$sth = $dbh->prepare(qq(SELECT * FROM run_data WHERE run_id=(?) ));
$sth->execute($date) or die "Some message";