我正在使用Perl DBI查询MySQL数据库,我的目标只是查看我的List
查询是否找到任何内容(即行> 0)。换句话说,如果SELECT
查询找到任何内容。
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
执行其他操作以确定有多少在查询中找到了行。
非常感谢。
答案 0 :(得分:3)
你误解了DBI的工作原理。引用the documentation
SELECT语句的典型方法调用序列是:
prepare, execute, fetch, fetch, ... execute, fetch, fetch, ... execute, fetch, fetch, ...
所以你有prepare
和execute
,但你实际上并没有获取 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
,最后可以根据此值是否为零来准备输出