如何确保查询成功执行
Posted
技术标签:
【中文标题】如何确保查询成功执行【英文标题】:How to make sure a query executed successfully 【发布时间】:2013-03-21 07:14:15 【问题描述】:我需要执行一个 select 语句查询并捕获返回的结果并将其存储在一个变量中。
执行没有返回任何数据。我检查了我的连接是否正确,因为它没有返回任何错误。
$dbh = DBI->connect($data_source, $username, $password) 或者死掉 $DBI::errstr;
以下是我的查询
my $sth = $dbh->prepare('select abc from pqr');
$sth->execute();
现在我正在检查它是否有一些数据
if($sth->rows)
print "We have data!\n";
else
print"No Data";
它总是打印No Data
。
为了获取我正在使用的数据
while(my @data = $sth->fetchrow_array())
print "$data[1]\n";
$dbh->disconnect;
我没有得到任何数据。 谁能建议我这里有什么问题? 使用 Java 时,相同的查询给了我想要的结果。
【问题讨论】:
我会检查execute
的返回值。 $sth->execute() or die "check dbi error msg"
@chrsblck 我已经添加了 die 语句,但我没有收到消息“检查 dbi 错误消息”,这意味着查询已成功执行。那么为什么我没有得到想要的结果。我得到的是空数组。
【参考方案1】:
根据 DBI docs
$rv = $sth->行数;
返回受最后一个影响行的命令影响的行数, 如果行数未知或不可用,则为 -1。
通常,您只能在非 SELECT 执行后依赖行数 (对于某些特定的操作,如 UPDATE 和 DELETE),或之后 获取 SELECT 语句的所有行。
写你的:
while(my @data = $sth->fetchrow_array())
print "$data[1]\n";
要求该行的第二个 ([1]) 元素对您的查询没有意义。
【讨论】:
非常感谢。现在我得到了结果。这是我的愚蠢错误。我从过去的2个小时开始战斗。我使用了 $data[0] 并得到了结果。非常感谢。【参考方案2】:如果您不处理大型结果集,那么获取所有内容会更快
my $rows = $db->selectall_arrayref(qq|Select abc from def|) or die "Can't select " . $db->errstr();
if (@$rows)
print "I have rows";
foreach my $row (@$rows)
# do something with $row->[0]
else
print "I did not get any rows/data";
只是另一种方式
【讨论】:
以上是关于如何确保查询成功执行的主要内容,如果未能解决你的问题,请参考以下文章