如何在使用Perl DBI->MySQL时检查空集
有没有办法检查DBI->execute语句是否返回空集?其目的是创建一个表,然后请求用户名,如果用户名不在表中,请检查空的fetch语句,然后添加到表中。有什么建议吗如何在使用Perl DBI->MySQL时检查空集,mysql,perl,dbi,Mysql,Perl,Dbi,有没有办法检查DBI->execute语句是否返回空集?其目的是创建一个表,然后请求用户名,如果用户名不在表中,请检查空的fetch语句,然后添加到表中。有什么建议吗 $sth = $dbh->prepare("SELECT * FROM table_name_here"); $sth->execute(); if(...$sth->fetch() was empty...) do something... 试试看: $sth = $dbh-
$sth = $dbh->prepare("SELECT * FROM table_name_here");
$sth->execute();
if(...$sth->fetch() was empty...)
do something...
试试看:
$sth = $dbh->prepare("SELECT * FROM table_name_here");
$sth->execute();
unless ($sth->fetch()) { do something..; }
试试看:
$sth = $dbh->prepare("SELECT * FROM table_name_here");
$sth->execute();
unless ($sth->fetch()) { do something..; }
实现这一点的一种可能方法是:
my $row_count = 0;
while (my @ary = $sth->fetchrow_array() ) { ...; $row_count++; }
unless ($row_count) {
...
}
但我不禁想知道,为什么在这种特定情况下需要使用fetchrow而不是fetchall。事实上,我会这样重组它:
my ($count) = $dbh->selectrow_array('
SELECT COUNT(*) FROM users WHERE username = ?'
undef, $username);
if ($count) { ... }
实现这一点的一种可能方法是:
my $row_count = 0;
while (my @ary = $sth->fetchrow_array() ) { ...; $row_count++; }
unless ($row_count) {
...
}
但我不禁想知道,为什么在这种特定情况下需要使用fetchrow而不是fetchall。事实上,我会这样重组它:
my ($count) = $dbh->selectrow_array('
SELECT COUNT(*) FROM users WHERE username = ?'
undef, $username);
if ($count) { ... }
有没有办法检查DBI->execute语句是否返回空集
对
有没有办法检查DBI->execute语句是否返回空集
对
我建议你像这样对记录的数量做一个初步的提取
my ($records) = $dbh->selectrow_array('SELECT count(*) FROM table_name_here');
我建议你像这样对记录的数量做一个初步的提取
my ($records) = $dbh->selectrow_array('SELECT count(*) FROM table_name_here');
这不适用于SELECT语句。从“DBI”模块的开始:对于“SELECT”语句,通常不可能知道将返回多少行,除非通过获取所有行。这对SELECT语句不起作用。从“DBI”模块的开始:对于“SELECT”语句,通常不可能知道将返回多少行,除非通过全部获取它们。这会告诉我将返回多少个不同的条目吗?因此,如果一个表中有4个条目,这将设置$records=4?它将告诉您表中有多少条记录,它们是否不同,尽管您很可能至少有一个唯一的列,在这种情况下,它们必须都不同。我建议你做个实验。请记住,在获取计数和获取数据本身之间,记录数发生变化的可能性非常小。这能告诉我将返回多少个不同的条目吗?因此,如果一个表中有4个条目,这将设置$records=4?它将告诉您表中有多少条记录,它们是否不同,尽管您很可能至少有一个唯一的列,在这种情况下,它们必须都不同。我建议你做个实验。请记住,在获取计数和获取数据本身之间,记录数发生变化的可能性非常小。