使用Perl DBI返回“SELECT COUNT(*)”是什么?

时间:2015-10-10 21:16:51

标签: mysql perl select dbi

我正在使用Perl DBI查询MySQL数据库,我的目标只是查看我的List查询是否找到任何内容(即行> 0)。换句话说,如果SELECT查询找到任何内容。

当我在MySQL中测试查询时,

SELECT向我返回一个数字,如1,2或3。

但是,我想知道这个号码是否通过DBI直接返回到我的Perl代码并被分配到我的SELECT COUNT(*)变量。

$sth

我想我的主要问题是my $sth = $dbh->prepare("SELECT COUNT(*) FROM `USERS` WHERE FIRSTNAME = ? AND LASTNAME = ?"); $sth->execute($firstName, $lastName); if ($sth > 0){ #Check if found any matches print "Found something!"; } else { print "No matches!"; } 是否会返回一个数字并直接保存在我的SELECT COUNT(*)变量中,或者我是否需要对$sth执行其他操作以确定有多少在查询中找到了行。

非常感谢。

1 个答案:

答案 0 :(得分:3)

你误解了DBI的工作原理。引用the documentation

  

SELECT语句的典型方法调用序列是:

prepare,
  execute, fetch, fetch, ...
  execute, fetch, fetch, ...
  execute, fetch, fetch, ...

所以你有prepareexecute,但你实际上并没有获取 SQL引擎发现的数据。测试$sth的值永远不会给你任何有用的信息,因为它是对DBI语句句柄对象的引用,如果它永远为零,那么关键的东西就出错了

要查找具有给定名字和姓氏的用户数,您可以编写类似这样的内容

my $sth = $dbh->prepare('SELECT COUNT(*) FROM users WHERE firstname = ? AND lastname = ?');

$sth->execute($first_name, $last_name);

my ($count) = $sth->fetchrow_array;

print $count ? "Found something!\n" : "No matches!\n";

fetch方法有很多种,你选择哪种方法取决于你是期望一行还是多行;一列或多列;是否要一次获取所有行或一次只获取一行;以及是否有一个简单的列值列表,或者您是否希望以Perl哈希的形式通过列名标识的值

在这种情况下,您只需要一行包含单个列 - 计数 - 因此fetchrow_array允许将结果直接分配给标量变量$count,最后可以根据值是否为零来准备输出