Claro que entiendo eso de ser FK/PK en caso de ser NULL.
Pero un NULL (o sin valor) en PHP no es igual al NULL de SQL:
Código PHP:
$null_de_php = NULL;
$null_de_sql = 'NULL';
¿Por qué?
Pues porque dicha expresión NULL debe ser pasada a tu consulta, no como nulo de php sino como nulo de sql.
Recuerda que SQL es un sub lenguaje con el cual trabaja PHP, así que debes hablar en su propio idioma.
En tu caso yo usaría:
Código PHP:
$valor ?: 'NULL';