a mi me funciona, prueba con esto para que veas la diferencia
Código PHP:
$nom=(empty($_POST['nom']))?'NULL':'\'algo\'';
$ape=(empty($_POST['ape']))?'NULL':'\'algo\'';
echo $mysql=sprintf("INSERT INTO nombre (`nombre`,`apellidos`) VALUES (%s, %s)",$nom,$ape);
el resultado es:
INSERT INTO nombre (`nombre`,`apellidos`) VALUES (NULL, NULL)
Código PHP:
$nom=(!empty($_POST['nom']))?'NULL':'\'algo\'';
$ape=(!empty($_POST['ape']))?'NULL':'\'otra cosa\'';
echo $mysql=sprintf("INSERT INTO nombre (`nombre`,`apellidos`) VALUES (%s, %s)",$nom,$ape);
el resultado es:
INSERT INTO nombre (`nombre`,`apellidos`) VALUES ('algo', 'otra cosa')
suerte y saludos.