如何正确设置空变量为NULL

时间:2010-07-30 05:14:12

标签: php mysql

我正在使用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')");

3 个答案:

答案 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_STMTPDOStatement。如果您想坚持常规的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());