我试图基本上用Perl搜索数据库来判断是否有一个具有特定ID的项目.此搜索不返回任何行,但也可以返回一行.
我有以下代码:
my $th = $dbh->prepare(qq{SELECT bi_exim_id FROM bounce_info WHERE bi_exim_id = '$exid'});
$th->execute();
if ($th->fetch()->[0] != $exid) {
...
Run Code Online (Sandbox Code Playgroud)
基本上,这会尝试查看是否返回了ID,如果不是,则继续执行脚本.但是它会在这个$th->fetch()->[0]东西上抛出Null数组引用错误.我怎么才能只是检查它是否返回行或现在?
bri*_*foy 33
该DBD :: mysql的驱动程序有一个的rows(),可以返回结果的计数方法:
$sth = $dbh->prepare( ... );
$sth->execute;
$rows = $sth->rows;
Run Code Online (Sandbox Code Playgroud)
这是特定于数据库驱动程序的,因此它可能在其他驱动程序中不起作用,或者在其他驱动程序中可能有所不同.
Pau*_*lin 13
my $th = $dbh->prepare(qq{SELECT bi_exim_id FROM bounce_info WHERE bi_exim_id = '$exid'});
$th->execute();
my $found = 0;
while ($th->fetch())
{
$found = 1;
}
Run Code Online (Sandbox Code Playgroud)
如果该行不存在,您的查询将不会返回任何内容,因此您无法取消引用该提取.
更新:你可能想重写那个
my $found = $th->fetch();
Run Code Online (Sandbox Code Playgroud)
你为什么不只是“选择计数(*)......”??
my ($got_id) = $dbh->selectrow_array("SELECT count(*) from FROM bounce_info WHERE bi_exim_id = '$exid'");
Run Code Online (Sandbox Code Playgroud)
或者阻止Little Bobby Tables:
my $q_exid = $dbh->quote($exid);
my ($got_id) = $dbh->selectrow_array("SELECT count(*) from FROM bounce_info WHERE bi_exim_id = $q_exid");
Run Code Online (Sandbox Code Playgroud)
或者,如果您要执行很多次:
my $sth = $dbh->prepare("SELECT count(*) from FROM bounce_info WHERE bi_exim_id = ?");
....save $sth (or use prepare_cached()) and then later
my ($got_id) = $dbh->selectrow_array($sth, undef, $exid);
Run Code Online (Sandbox Code Playgroud)