Heim > Datenbank > MySQL-Tutorial > Hauptteil

Können mit PDO vorbereitete Anweisungen Tabellen- und Spaltennamen oder SQL-Schlüsselwörter binden?

Mary-Kate Olsen
Freigeben: 2024-11-24 10:25:12
Original
516 Leute haben es durchsucht

Can PDO Prepared Statements Bind Table and Column Names, or SQL Keywords?

Können PDO-vorbereitete Anweisungen Bezeichner oder Syntaxschlüsselwörter binden?

Bei einem Versuch, eine dynamische Abfrage mit Variablen zu erstellen, die eine Tabelle oder ein Feld darstellen /column und einen Wert, nach dem gesucht werden muss, kann es bei der Verwendung der vorbereiteten Anweisungen von PDO zu unerwarteten Schwierigkeiten kommen. Insbesondere die Verwendung von bindParam() oder bindValue() zum Binden dieser Variablen kann zu leeren Ergebnismengen führen.

Um dem Kern des Problems auf den Grund zu gehen, ist es wichtig zu verstehen, dass PDO-Platzhalter zur Darstellung von Datenliteralen bestimmt sind. Daher kann der Versuch, sie als Bezeichner (wie Tabellen- oder Feldnamen) oder Syntaxschlüsselwörter (z. B. „LIKE“) zu verwenden, zu fehlerhaftem Verhalten führen.

Insbesondere bietet PDO keine inhärente Unterstützung für Bindungsbezeichner . Dies bedeutet, dass Entwickler die Verantwortung für den Umgang mit diesen Kennungen selbst übernehmen müssen. Um eine ordnungsgemäße Ausführung sicherzustellen, müssen strenge Regeln eingehalten werden:

Regeln für Bindungsbezeichner:

  1. Bezeichner in Backticks einschließen.
  2. Escapen Sie Backticks innerhalb des Bezeichners, indem Sie sie verdoppeln.

Diese Formatierungsregeln Verhindern Sie Syntaxfehler und SQL-Injection-Schwachstellen.

Regeln für die Bindung von Syntax-Schlüsselwörtern:

  1. Während die Formatierung von Schlüsselwörtern nicht verfügbar ist, ist Whitelisting von entscheidender Bedeutung.
  2. Stellen Sie sicher, dass dynamische Schlüsselwörter mit einer Liste zulässiger Werte übereinstimmen, um willkürliche Schlüsselwörter zu verhindern Substitution.

Beispiel:

Betrachten Sie den folgenden Codeausschnitt, der die oben genannten Regeln einhält:

$allowed = array("name", "price", "qty");
$key = array_search($_GET['field'], $allowed);
$field = $allowed[$key];
$query = "SELECT $field FROM t"; // Value is safe
Nach dem Login kopieren

Zusammenfassend: Während PDO-vorbereitete Anweisungen sich durch die Bindung von Datenliteralen auszeichnen, fehlt ihnen die Unterstützung für Bindungsbezeichner oder Syntaxschlüsselwörter. Durch die sorgfältige Befolgung der dargelegten Regeln können Entwickler die sichere und genaue Ausführung dynamischer Abfragen gewährleisten, die diese kritischen Komponenten nutzen.

Das obige ist der detaillierte Inhalt vonKönnen mit PDO vorbereitete Anweisungen Tabellen- und Spaltennamen oder SQL-Schlüsselwörter 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