Heim > Datenbank > MySQL-Tutorial > Kann ich Bezeichner und Schlüsselwörter in von PHP PDO vorbereiteten Anweisungen binden?

Kann ich Bezeichner und Schlüsselwörter in von PHP PDO vorbereiteten Anweisungen binden?

Mary-Kate Olsen
Freigeben: 2024-11-24 11:34:10
Original
1038 Leute haben es durchsucht

Can I Bind Identifiers and Keywords in PHP PDO Prepared Statements?

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:

  • Bezeichner richtig formatieren: Bezeichner in Backticks (') und Escape-Backticks einschließen hinein, indem Sie sie verdoppeln (```).
  • Whitelisting verwenden: Dynamische Identifikatoren anhand einer fest codierten Liste zulässiger Werte validieren, um potenzielle Injektionen zu verhindern.
  • Anwenden Es gelten die gleichen Regeln für Syntaxschlüsselwörter: Whitelist und Validierung aller Syntaxschlüsselwörter, die in Dynamic verwendet werden Abfragen.

Codebeispiel:

So formatieren und validieren Sie einen Bezeichner:

$field = "`" . str_replace("`", "``", $field) . "`";
Nach dem Login kopieren

So setzen Sie ein Schlüsselwort auf die Whitelist und validieren es:

$dir = $_GET['dir'] == 'DESC' ? 'DESC' : 'ASC'; 
Nach dem Login kopieren

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 . '%');
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage