perl SQLite DBI - bind_value不与'?'一起使用,但在使用硬编码值时有效

vbkedwbf  于 2023-04-21  发布在  SQLite
关注(0)|答案(2)|浏览(100)

我正在使用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,看看会发生什么。

4dc9hkyq

4dc9hkyq1#

'?'表示“由字符?组成的字符串。去掉引号。

my $hash_ref = $dbh->selectrow_hashref(
   "select * from run_data  where date = ?", undef, $date);
vwoqyblh

vwoqyblh2#

尝试类似的东西:

$sth = $dbh->prepare(qq(SELECT * FROM run_data WHERE run_id=(?) ));
$sth->execute($date) or die "Some message";

相关问题