Können vorbereitete Anweisungen mit dynamischen Tabellennamen umgehen?
Sie haben leider versucht, eine vorbereitete MySQL-Anweisung mit einem Platzhalter auszuführen , dies ist keine unterstützte Funktion. Vorbereitete Anweisungen dienen dazu, Parameter an „Wert“-Abschnitte einer SQL-Anweisung zu binden, und nicht an Strukturelemente wie Tabellennamen.
Auf Datenbankebene kann eine Änderung des Tabellennamens die Gültigkeit der Anweisung ändern, was den Rahmen der Vorkompilierung sprengt. Selbst in Datenbankschnittstellen, die die Verwendung von Platzhaltern überall zulassen, wird der Wert des Platzhalters immer noch in eine Zeichenfolge konvertiert, sodass SELECT * FROM ? tatsächlich ungültiges SQL sendet (d. h. „SELECT * FROM 'mytable' ').
Die beste Vorgehensweise zur Vermeidung dieser Injektion ist die Verwendung einer Whitelist-Prüfung. Überprüfen Sie vor dem Erstellen der Abfrage, ob der eingegebene Tabellenname in der vorab genehmigten Liste enthalten ist. Dadurch wird sichergestellt, dass nur sichere Tabellennamen verwendet werden, wodurch das Risiko einer SQL-Injection verringert wird.
Das obige ist der detaillierte Inhalt vonKönnen vorbereitete Anweisungen dynamische Tabellennamen in SQL verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!