我正在使用 Perl DBI 插入 MySQL 数据库。一些变量被故意设置为
undef
其中变量的值不可用,因此该变量旨在
NULL
在数据库中。
但是,我在插入语句中收到有关未初始化值的警告。
这里的最佳做法是什么?据我所知,除了在没有可用值时将变量设置为 undef 之外,没有其他方法可以在 MySQL 数据库中正确分配 NULL。我应该关闭未初始化值的警告吗?
你可能正在做
$dbh->do("INSERT INTO Foo ( field ) VALUES ( '$x' )");
在这种情况下,您将插入一个空字符串,而不是 NULL,when $x
is undef
。它还会中断其他值(例如,包含单引号的值)。这是你应该做的:
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);