我正在跑步:
my $config = "";
my $dsn = "dbi:SQLite:dbname=test.db";
my $dbh = DBI->connect(
$dsn,
"",
"",
{ RaiseError => 1}
) or die $DBI::errstr;
my $sth = $dbh->prepare("SELECT config FROM tests WHERE status=1");
$sth->execute();
my $config = $sth->fetchrow();
if($config ne "")
{
print "found!"
}
$sth->finish();
$dbh->disconnect();
为什么我
Use of uninitialized value $config in string ne at .....
答案 0 :(得分:3)
没有记录fetchrow
。您应该使用fetchrow_array
代替。
问题是DBI
为数据库中设置为undef
的值返回值NULL
。因此my $config = $sth->fetchrow_array
将$config
设置为undef
如果表中找不到匹配的行,或如果找到的行有NULL
的值为config
。这意味着它不能用于测试表中是否存在任何匹配的行。此外,您无法比较undef
值,就好像它是一个字符串一样 - 它会引发您看到的错误
Use of uninitialized value $config in string ne
因此您需要测试fetchrow_array
是否返回空列表,或者fetchrow_arrayref
是否返回未定义的值。
您的代码应该是
my @config = $sth->fetchrow_array;
if (@config) {
print "found!"
}
或
my $config = $sth->fetchrow_arrayref;
if (defined $config) {
print "found!"
}