Variable Spaltennamen in vorbereiteten Anweisungen
Problem:
Verwendung vorbereiteter Anweisungen zum Auswählen von Zeilen , können Sie damit die zurückgegebenen Spaltennamen angeben? Methode?
Kontext:
Beim Arbeiten mit MySQL und Java führen Versuche, Spaltennamen als Parameter in eine vorbereitete Anweisung aufzunehmen, dazu, dass die Spaltennamen als Literal eingefügt werden Zeichenfolge in der Abfrage, nicht als tatsächliche Spaltennamen.
Erklärung:
Vorbereitet Anweisungen sollen die SQL-Injection verhindern, indem sie die Angabe von Parametern ermöglichen, ohne dass sie direkt in die Abfragezeichenfolge eingefügt werden. Dieser Mechanismus ist jedoch für Parameterwerte gedacht und nicht für die Änderung der Abfrage selbst.
Problemumgehung:
1. Überdenken des Datenbankdesigns:
Vermeiden Sie es, Spaltennamen dem Benutzer direkt zugänglich zu machen. Erwägen Sie stattdessen die Verwendung eines anderen Mechanismus, z. B. das Erstellen einer weiteren Spalte in der Datenbank, um die gewünschten Spaltennamen neben den Daten zu speichern.
2. Manuelle Abfragekonstruktion:
Wenn eine Änderung des Datenbankdesigns nicht möglich ist, können Sie die Eingabespaltennamen bereinigen und die SQL-Abfrage manuell erstellen. Verwenden Sie die Methode String#replace(), um alle Vorkommen des Anführungszeichens in den Spaltennamen zu maskieren.
Schlussfolgerung:
Es ist zwar nicht möglich, die zurückgegebene Spalte anzugeben Namen als Parameter in vorbereiteten Anweisungen verwenden, gibt es alternative Ansätze, um die gewünschte Funktionalität zu erreichen. Sorgen Sie für eine ordnungsgemäße Eingabebereinigung, um Sicherheitslücken durch SQL-Injection zu verhindern.
Das obige ist der detaillierte Inhalt vonKönnen vorbereitete Anweisungen in MySQL dynamisch angegebene Spaltennamen verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!