Php 如何正确地将空白变量设置为NULL
我正在使用simplexml\u load\u file()将XML提要解析到MYSQL表中。有些变量是空的,我希望它们是实际的NULL而不是NULL,或者有什么区别Php 如何正确地将空白变量设置为NULL,php,mysql,Php,Mysql,我正在使用simplexml\u load\u file()将XML提要解析到MYSQL表中。有些变量是空的,我希望它们是实际的NULL而不是NULL,或者有什么区别 $xml = simplexml_load_file('cb.xml') or die ('Bad XML File'); foreach($xml->item as $item) { $name = $item->name; //Tried if ($name == '') { $name = '
$xml = simplexml_load_file('cb.xml') or die ('Bad XML File');
foreach($xml->item as $item) {
$name = $item->name;
//Tried
if ($name == '') {
$name = 'NULL';
}
//And
if ($name == '') {
$name = NULL;
}
mysql_query("INSERT INTO cb (name) VALUES ('$name')");
第二个变量初始化正确;第一个是字符串'NULL'(从PHP的角度来看,这并不特殊)。但是,您应该使用prepared语句(或者。如果您想继续使用常规的mysql扩展,请使用 PDO的一个例子是:
$stmt = $pdo_con->prepare("INSERT INTO cb (name) VALUES (?);");
$stmt->execute(array($name));
这将正确处理空值,与当前的字符串插值不同。这是因为您为MySQL提供了一个字符串:
.... ('ANYTHING WITHIN QUOTES IS A STRING')
当PHPnull
值被“强制”为字符串时,它将变成一个空字符串。因此,您第一次尝试时给出了…('null')
,现在给出了…('')
必须在查询中使用NULL
关键字(不带引号)将NULL
插入数据库字段
mysql_query("INSERT INTO cb (name) VALUES (" . ($name == null ? "NULL" : "'$name'") . ")");
哦,和往常一样,注意不要让SQL注入未受保护的
$name
变量。如果您使用了多个值,并且如果else有效,那么请执行以下操作:(我们将在第3列中插入null数据)*注意,单引号被省略。这是因为“null”不能作为sql的字符串输入,否则它将是一个字符串NULL,而不是我们想要的sql NULL
//condition
if ($col3_var !== NULL)
$col3_var = "'$col3_var'";
else
$col3_var = "NULL"; //SQL will omit the "" here
$sql = "INSERT INTO tablename
(col1, col2, col3...)
VALUES
('$col1_var', '$col2_var', $col3_var)";
$result = mysql_query($sql) or die("Err: " . mysql_error());
你能给我一个准备好的语句的例子吗?因为当我用NULL而不是NULL时,MYSQL仍然显示一个空白字段。下面是一个例子。了解它们,使用它们,喜欢它们。第二个可能会在ORACLE上工作。我做到了这一点,我只是在使用多个变量值的语法时遇到了麻烦。