Wie zum verwalten von leer, IN sql-Abfrage?
$ids = array(1,2,3);
$in = implode(',',$ids);
$query = "SELECT * FROM user where user_id IN ($in) ";
Abfrage funktioniert, kein problem. Aber wenn $ids
ist leeres array $ids = array();
Bekam ich die sql-Abfrage Fehler Recht so, weil SELECT * FROM user where user_id IN ()
ist keine gültige Abfrage .
Wie kann ich vermeiden, eine solche situation ohne prüfen auf leeres array, ich.e Abfrage ausführen, egal was ist ?
- Warum nicht einfach überprüfen, für leeres array? MySQL nur erwartet einige Parameter nach, so dass ich denke, es gibt keine Möglichkeit
- Ich hoffe
$ids
sind für den Benutzer nicht zur Verfügung gestellt, und wenn Sie entkommen Sie richtig, bevor Sie Sie in Ihre Abfrage. - Ich habe eine situation, wo ich nicht check for empty array . Ich musste Abfrage ohne Fehler ausgeführt . Alles was ich tun kann, ist die Veränderung der input-parameter . Abfrage ausgeführt, Ergebnis zurückgeben null ist ok für mich .
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beste Weg, dies zu bewerkstelligen, ist:
Das erspart Ihnen die if/else-Struktur und alles andere
sollten Sie nicht ausführen der Abfrage, wenn die $in leer. Ich denke, was yoou brauchen, ist so etwas wie das
Bearbeiten
$ids
leer ist? Auch die SQL-injection?können Sie hinzufügen 0 vor $string-ids. Nachdem alle Nicht-ids beginnen bei 0 in eine beliebige Datenbank.
Oder Sie können tun, wie diese..
Ich in der Regel immer ein "ungültig" - Wert, so dass die Liste nie leer ist:
Keine weitere bedingte Anweisungen sind erforderlich, halten Sie den code relativ sauber.
Die "ungültigen" Wert muss außerhalb des Bereichs der zulässigen Werte, natürlich.
(Das Beispiel oben wird davon ausgegangen, dass gültige
$ids
sind immer positiv.)Ich tun, verschiedene Arten zu überprüfen, in verschiedenen Situationen, um sicherzustellen, dass die sql-Anweisung gültig ist.
In der grundlegendsten Art der Prüfung, die ich stellen Sie sicher, dass die variable nicht leer ist, oder false
In der Regel verwende ich eine ganze Reihe von
db_*
Funktionen, die überprüfen die Eingabe ich pass in Abfragen, so dass ich damit umgehen kann mehr erweiterte überprüfung verwendet, wo die$ids
array kommt ausHier ist etwas test-code, der funktioniert gut für mich in Dutzenden von Situationen.
Ausgabe:
Sollten Sie eine bedingte Verkettung:
EDIT: behoben, mein Missverständnis.
für die Abfrage sollten Sie es nicht ausführen überhaupt.
für die anderen Fällen könnte es sein, bedingte Verkettung wie in den anderen Antworten