Bindungsbezeichner und Syntaxschlüsselwörter in PHP-PDO-vorbereiteten Anweisungen
Dynamische Abfragen ermöglichen flexible Datenbankoperationen durch die Verwendung von Variablen zum Definieren von Tabellennamen und Spalten Namen und Suchwerte. Allerdings können Bindungsbezeichner (Tabellen- oder Feldnamen) oder Syntaxschlüsselwörter, die PDO-vorbereitete Anweisungen verwenden, zu unerwarteten Ergebnissen führen.
Problem:
Bei Verwendung von bindParam() oder bindValue () zum Binden von Variablen, die Bezeichner oder Syntaxschlüsselwörter darstellen, wird anstelle der erwarteten Datenbank ein leeres Array zurückgegeben Ergebnisse.
Erklärung:
PDO-vorbereitete Anweisungen können nur Datenliterale binden. Daher führt der Versuch, Bezeichner oder Schlüsselwörter zu binden, nicht zum gewünschten Ergebnis.
Lösung:
Um sichere und zuverlässige dynamische Abfragen zu erstellen, ist Folgendes von entscheidender Bedeutung:
Codebeispiel:
So formatieren und validieren Sie einen Bezeichner:
$field = "`" . str_replace("`", "``", $field) . "`";
So setzen Sie ein Schlüsselwort auf die Whitelist und validieren es:
$dir = $_GET['dir'] == 'DESC' ? 'DESC' : 'ASC';
Dann fügen Sie die bereinigten Variablen in die vorbereitete Datei ein Aussage:
$stmt = $db->prepare(' SELECT * FROM ? WHERE ? LIKE ? '); $stmt->bindParam(1, $searchTable); $stmt->bindParam(2, $searchBy); $stmt->bindValue(3, '%' . $searchTerm . '%');
Durch die Einhaltung dieser Regeln können Sie die Gültigkeit und Sicherheit Ihrer dynamischen Datenbankabfragen gewährleisten.
Das obige ist der detaillierte Inhalt vonKann ich Bezeichner und Schlüsselwörter in von PHP PDO vorbereiteten Anweisungen binden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!