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
Mary-Kate OlsenOriginal
2024-11-24 11:34:101034Durchsuche

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) . "`";

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!

Stellungnahme:
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