我正在使用simplexml_load_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 = 'NULL';
}
//And
if ($name == '') {
$name = NULL;
}
mysql_query("INSERT INTO cb (name) VALUES ('$name')");
答案 0 :(得分:5)
这是因为你给MySQL一个字符串:
.... ('ANYTHING WITHIN QUOTES IS A STRING')
当“转换”为字符串时,PHP null
值变为空字符串。所以你的第一次尝试给了... ('NULL')
,现在它给了... ('')
。
您必须在查询中使用NULL
关键字(不带引号)将NULL
插入数据库字段。
mysql_query("INSERT INTO cb (name) VALUES (" . ($name == null ? "NULL" : "'$name'") . ")");
哦,像往常一样,注意不要让SQL注入未受保护的$name
变量。
答案 1 :(得分:2)
第二个变量初始化是正确的;第一个是字符串'NULL'(从PHP的角度来看并不特别)。但是,您应该使用预准备语句(MySQLi_STMT或PDOStatement。如果您想坚持常规的mysql扩展,请使用mysql_real_escape_string
PDO的一个例子是:
$stmt = $pdo_con->prepare("INSERT INTO cb (name) VALUES (?);");
$stmt->execute(array($name));
这将正确处理空值,与当前字符串插值不同。
答案 2 :(得分:0)
如果您使用多个值和速记如果其他确实有效则执行此操作:(我们将在第3列中插入空数据)*注意单引号被省略..这是因为“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());