Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否关闭Perl MySQL insert语句中的警告?_Mysql_Perl_Dbi - Fatal编程技术网

是否关闭Perl MySQL insert语句中的警告?

是否关闭Perl MySQL insert语句中的警告?,mysql,perl,dbi,Mysql,Perl,Dbi,我正在使用PerlDBI插入MySQL数据库。一些变量被故意设置为 undef 变量的值不可用,因此该变量的目的是 NULL 在数据库中 但是,我在insert语句中收到有关未初始化值的警告 这里的最佳实践是什么?就我所见,除了在没有可用值时将变量设置为undef之外,没有其他方法可以在MySQL数据库中正确分配NULL。我应该关闭未初始化值的警告吗?您可能正在这样做 $dbh->do("INSERT INTO Foo ( field ) VALUES ( '$x' )"

我正在使用PerlDBI插入MySQL数据库。一些变量被故意设置为

   undef 
变量的值不可用,因此该变量的目的是

   NULL
在数据库中

但是,我在insert语句中收到有关未初始化值的警告

这里的最佳实践是什么?就我所见,除了在没有可用值时将变量设置为undef之外,没有其他方法可以在MySQL数据库中正确分配NULL。我应该关闭未初始化值的警告吗?

您可能正在这样做

$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);
你可能在做什么

$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);


可以显示您的警告消息吗?在连接(.)中使用未初始化的值$blah,或在null_to_数据库第1450行使用字符串。@user1849286您正在做许多人在使用DBI模块时正在做的事情:不使用占位符。这可能是危险和有问题的,当然也不容易。请参阅文档。此警告为串联未定义值。此处有更多详细信息-您能显示您的警告消息吗?在连接(.)中使用未初始化的值$blah或在null_to_数据库第1450行使用字符串。@user1849286您正在做许多人在使用DBI模块时正在做的事情:不使用占位符。这可能是危险和有问题的,当然也不容易。请参阅文档。此警告为串联未定义值。这里有更多详细信息-这是否意味着我可以通过脚本在不存在值的地方分配值“NULL”,并且仍然希望在MySQL数据库中正确定义NULL?分配值“NULL”不会在数据库中创建正确的NULL值-它会创建文本字符串“NULL”的值,对吗?上面,如果没有定义$x,那么赋值“NULL”不是用来插入NULL值的吗?因此不起作用。不,不能。将字符串
NULL
放入
$x
将不起作用,这就是我没有这样做的原因。请注意,在构造的SQL语句中,
NULL
周围没有引号。在构造的SQL语句中,NULL周围有单引号。但是好的,我明白了,我们基本上必须在SQL语句中使用的文本值中创建一个不带引号的NULL,谢谢没有。当
$x
未定义时,我的代码不会在
NULL
周围加引号。这是否意味着我可以通过脚本在不存在值的地方分配值“NULL”,并且仍然希望在MySQL数据库中正确定义NULL?分配值“NULL”不会在数据库中创建正确的NULL值-它会创建一个文本字符串“NULL”的值是否正确?上面,如果没有定义$x,那么赋值“NULL”不是用来插入NULL值的吗?因此不起作用。不,不能。将字符串
NULL
放入
$x
将不起作用,这就是我没有这样做的原因。请注意,在构造的SQL语句中,
NULL
周围没有引号。在构造的SQL语句中,NULL周围有单引号。但是好的,我明白了,我们基本上必须在SQL语句中使用的文本值中创建一个不带引号的NULL,谢谢没有。当
$x
未定义时,我的代码不会在
NULL
周围加引号。