我这周第一次使用perl DBI进行工作。
大多数查询和插入操作都能正常运行,但是我在一个特定的查询上遇到了返回0行的问题。当我启用perl DBI的跟踪功能,并从跟踪中复制完全相同的语句到服务器(通过HeidiSQL),会返回1行。
原始SQL查询中是否存在歧义?目的是检索具有最近时间戳的行。时间戳列中不存在重复项。
DB连接的初始设置为:
大多数查询和插入操作都能正常运行,但是我在一个特定的查询上遇到了返回0行的问题。当我启用perl DBI的跟踪功能,并从跟踪中复制完全相同的语句到服务器(通过HeidiSQL),会返回1行。
原始SQL查询中是否存在歧义?目的是检索具有最近时间戳的行。时间戳列中不存在重复项。
DB连接的初始设置为:
$dsn = 'dbi:mysql:<servername>:<port>';
$dbh = DBI->connect($dsn, "<username>","<password>") or die "unable to connect $DBI::errstr\n";
准备并执行语句: 代码到达print 'no rows found'
my $sth = $dbh->prepare("SELECT name, location, timestamp, notified FROM storage
WHERE name = ? AND location = ?
AND timestamp = (SELECT MAX(timestamp) FROM storage)");
$sth->execute($strg_data->{name}, $strg_data->{location});
my @latest = $sth->fetchrow_array();
if (@latest) {
<snipped>
}
else {
print "no rows found!\n";
}
从Perl DBI跟踪中提取(级别设置为2):
-> prepare for DBD::mysql::db (DBI::db=HASH(0xebe4c0)~0xec0010 'SELECT name, location, timestamp, notified FROM storage
WHERE name = ? AND location= ? AND timestamp = (SELECT MAX(timestamp) FROM storage)')
Setting mysql_use_result to 0
<- prepare= DBI::st=HASH(0xecd7d0) at monitor.pl line 147
-> execute for DBD::mysql::st (DBI::st=HASH(0xecd7d0)~0xec9e50 'xxxx' '/tmp/')
-> dbd_st_execute for 00ecd7a0
-> mysql_st_interal_execute
Binding parameters: SELECT name, location, timestamp, notified FROM storage
WHERE name = 'xxxx' AND location= '/tmp/' AND timestamp = (SELECT MAX(timestamp) FROM storage)
<- mysql_st_internal_execute returning rows 0
<- dbd_st_execute returning imp_sth->row_num 0
<- execute= '0E0' at monitor.pl line 152
$dbh->last_insert_id
。 - ikegami