C'è un modo molto simper per fare questo.
creare questa dichiarazione preparata:
select * from mytable
where status = ? and (userid = ? or ?)
and (location = ? or ?)
order by `date` desc, time desc
limt ?
e passare i args per legare in questo modo:
$stmt = $mysqli->prepare([statement above]);
$stmt->bind_param("siiiii",
"active", $userid, $userid == "ALL",
$location, $location == "ALL",
$limit);
Il predicato (user_id = ? or ?)
sarà vero quando l'user_id è uguale al primo parametro sostituito, o quando il il secondo parametro sostituito è vero.
$user_id
quando convertito in un int sarà il suo valore quando è una rappresentazione in stringa di un numero o zero altrimenti. L'espressione $userid == "ALL"
verrà valutata su un valore booleano, che verrà passato a bind_param
. Non possiamo dire a bind_param
che un parametro è un valore booleano (la stringa di formato comprende solo string, int, double e blob), quindi bind_param convertirà il valore booleano in un int, che funziona per noi.
Fintantoché nessun ID_utente o id_destinazione nel database è zero, stai bene.
GRAZIE ... posso dire che sarà un buon giorno ora ha – johnnietheblack