Heim >Datenbank >MySQL-Tutorial >Warum geben meine von MySQLi vorbereiteten Anweisungen mit dem IN-Operator keine Ergebnisse zurück?
Vorbereitete MySQLi-Anweisungen mit dem IN-Operator
Entwickler stehen häufig vor der Notwendigkeit, eine Datenbank mit dem IN-Operator abzufragen, um bestimmte Zeilen basierend darauf abzurufen eine Reihe von Werten. Während die Verwendung vorbereiteter Anweisungen eine empfohlene Vorgehensweise zur Verhinderung von SQL-Injection ist, haben einige Benutzer berichtet, dass sie beim Versuch, vorbereitete Anweisungen mit dem IN-Operator zu verwenden, auf Schwierigkeiten gestoßen sind. Dieser Artikel befasst sich mit einem konkreten Fall, bei dem der Datenabruf mit vorbereiteten Anweisungen und dem IN-Operator keine Ergebnisse lieferte, obwohl die gewünschten Daten in der Datenbank vorhanden waren.
Im bereitgestellten Beispiel hatte der Entwickler eine Anweisung vorbereitet, die Es wurde versucht, Zeilen aus der Tabelle „Benutzer“ auszuwählen, bei denen die Spalte „Nachname“ mit einem der in einem Array bereitgestellten Werte übereinstimmt. Der Vorbereitungsprozess umfasste das Binden einer Zeichenfolge mit den durch Kommas getrennten Werten an die vorbereitete Anweisung. Die Abfrage gab jedoch einen leeren Ergebnissatz zurück, obwohl die Werte in der Datenbank vorhanden waren.
Bei weiteren Untersuchungen stellte der Entwickler fest, dass das Problem in der Art und Weise lag, wie der Parameter an die vorbereitete Anweisung gebunden war. Der Code übergab ursprünglich die Zeichenfolge mit den durch Kommas getrennten Werten direkt, was dazu führte, dass MySQL die gesamte Zeichenfolge als einen einzelnen Wert und nicht als eine Reihe von Werten behandelte.
Die Lösung umfasste die Übergabe eines Arrays von Referenzen an jeden Wert die Werte im Array „lastnames“, zusammen mit einer Zeichenfolge, die den Typ jedes Werts angibt. Dadurch hat MySQL jeden Wert einzeln korrekt erkannt und gebunden. Dadurch konnte der IN-Operator wie vorgesehen funktionieren, was zum erfolgreichen Abruf der gewünschten Zeilen führte.
Auch wenn diese Lösung vielleicht nicht die eleganteste oder prägnanteste ist, geht sie das Problem effektiv an und zeigt, wie wichtig eine korrekte Bindung ist Parameter bei Verwendung vorbereiteter Anweisungen mit dem IN-Operator.
Das obige ist der detaillierte Inhalt vonWarum geben meine von MySQLi vorbereiteten Anweisungen mit dem IN-Operator keine Ergebnisse zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!