Il problema, secondo me, è che il NULL di php ('', 0 o null) lo devi convertire nella stringa NULL da inserire nella query (che poi verrà interpretata come NULL da dbms). L'unica soluzione che mi viene in mente è questa:
Codice PHP:
$codice=(trim($_POST['codice_libro'])) ? "'".$_POST['codice_libro']."'" : 'NULL';
$utente=(trim($_POST['utente'])) ? "'".$_POST['utente']."'" : 'NULL';
SELECT *
FROM my_libri
WHERE
codice_libro = IFNULL($codice, codice)
AND utente = IFNULL($utente, utente)
Ma a questo punto tanto vale scrivere:
Codice PHP:
$codice=(trim($_POST['codice_libro'])) ? "'".$_POST['codice_libro']."'" : 'codice';
$utente=(trim($_POST['utente'])) ? "'".$_POST['utente']."'" : 'utente';
SELECT *
FROM my_libri
WHERE
codice_libro = $codice
AND utente = $utente
Oppure, se ho capito le tue intenzioni, puoi costruirti la query dinamicamente:
Codice PHP:
$condition = '1=1 ';
if(trim($_POST['codice_libro'])){
$condition = " AND codice_libro='". $_POST['codice_libro'] ."'";
}
if(trim($_POST['codice_libro'])){
$condition = " AND utente ='". $_POST['utente'] ."'";
}
SELECT *
FROM my_libri
WHERE $condition
PS: In ogni caso andrebbe fatto l'escape di $_POST['utente'] e $_POST['codice_libro']