Una cosa importante aquí: el valor NULL de PHP no es el mismo valor NULL de SQL.
En PHP el NULL significa nada, si lo imprimes saldrá vacío, pero la consulta espera literalmente "NULL" para que lo entienda.
Para que eso funcione PHP debe proveer dicho "NULL" como una cadena de texto.
¿Cómo?
Fácil:
Código PHP:
Ver original// MAL
$foo = NULL;
$sql = "UPDATE table SET column = $foo WHERE id = 99";
// UPDATE table SET column = WHERE id = 99
// MAL
$foo = 'NULL';
$sql = "UPDATE table SET column = $foo WHERE id = 99";
// UPDATE table SET column = NULL WHERE id = 99
El problema restante sería agregar comillas sólo si la variable no es NULL, usa tu ingenio.