使用Perl DBI插入MySQL数据库。有些变量被故意设置为
undef
其中变量的值不可用,因此变量是
NULL
在数据库中。
但是,我在insert语句中收到有关未初始化值的警告。
这里的最佳做法是什么?据我所知,除了在没有可用值时将变量设置为undef之外,没有其他方法可以在MySQL数据库中正确分配NULL。我应该关闭未初始化值的警告吗?
答案 0 :(得分:3)
你可能正在做
$dbh->do("INSERT INTO Foo ( field ) VALUES ( '$x' )");
在$x
为undef
时,您将插入空字符串,而不是NULL。它还会打破其他值(例如那些包含单引号的值)。这就是你应该做的事情:
my $x_lit = defined($x) ? $dbh->quote($x) : 'NULL';
$dbh->do("INSERT INTO Foo ( field ) VALUES ( $x_lit )");
或者更好:
$dbh->do("INSERT INTO Foo ( field ) VALUES ( ? )", undef, $x);