tags:

views:

49

answers:

2

I am parsing an XML feed into a MYSQL table using simplexml_load_file(). Some of the variables are blank, I would like them to be actual NULL instead of NULL, or is there even a difference?

$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')");
+1  A: 

The second variable initialization is correct; the first is just the string 'NULL' (which is not special from PHP's viewpoint). However, you should be using prepared statements (MySQLi_STMT or PDOStatement. If you want to stick with the regular mysql extension, use mysql_real_escape_string

An example with PDO is:

$stmt = $pdo_con->prepare("INSERT INTO cb (name) VALUES (?);");
$stmt->execute(array($name));

This will handle nulls correctly, unlike your current string interpolation.

Matthew Flaschen
Can you give an example of a prepared statement? Because when I use just NULL instead of 'NULL' MYSQL still shows a blank field.
ZaneDeFazio
Here's a [previous answer I gave explaining prepared statements](http://stackoverflow.com/questions/3340533/filtering-out-mysql-query-in-php/3340616#3340616). Know them, use them, love them.
Charles
+1  A: 

This is because you're giving MySQL a string:

.... ('ANYTHING WITHIN QUOTES IS A STRING')

And null, when "casted" to a string, becomes an empty string. So your first try gave ... ('NULL'), and now it gives ... ('').

You must use the NULL keyword inside the query, without quotes, to insert NULL into a database field.

mysql_query("INSERT INTO cb (name) VALUES (" . ($name == null ? "NULL" : "'$name'") . ")");

Oh, and as usual, take care not to get SQL-injected with your unprotected $name variable.

zneak
I got that to work, I am just having trouble using that syntax with more than one VALUES variable.
ZaneDeFazio