„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie gehe ich mit vorbereiteten Anweisungen mit der IN()-Bedingung in WordPress um?

Wie gehe ich mit vorbereiteten Anweisungen mit der IN()-Bedingung in WordPress um?

Veröffentlicht am 23.12.2024
Durchsuche:775

How to Handle Prepared Statements with IN() Condition in WordPress?

Verarbeitung vorbereiteter Anweisungen mit der IN()-Bedingung in WordPress

WordPress bietet vorbereitete Anweisungen zum Schutz vor SQL-Injection-Angriffen und zur Verbesserung der Abfrageleistung. Die Verwendung der IN()-Bedingung mit mehreren Werten in einer Zeichenfolge kann jedoch zu Herausforderungen führen.

Problemstellung:

Betrachten Sie die folgende Situation:

$villes = '"paris","fes","rabat"';
$sql = 'SELECT distinct telecopie FROM `comptage_fax` WHERE `ville` IN(%s)';
$query = $wpdb->prepare($sql, $villes);

Dieser Code maskiert die Zeichenfolge nicht richtig, was zu einer einzelnen Zeichenfolge mit maskierten doppelten Anführungszeichen führt:

SELECT distinct telecopie FROM `comptage_fax` WHERE `ville` IN('\"paris\",\"fes\",\"rabat\"')

Lösung:

Um richtig Führen Sie zum Implementieren einer vorbereiteten Anweisung mit mehreren Werten in WordPress die folgenden Schritte aus:

// Create an array of the values to use in the list
$villes = array('paris', 'fes', 'rabat');

// Generate the SQL statement.
// Number of %s items based on length of $villes array
$sql = "
  SELECT DISTINCT telecopie
  FROM `comptage_fax`
  WHERE `ville` IN(" . implode(', ', array_fill(0, count($villes), '%s')) . ")
";

// Call $wpdb->prepare passing the values of the array as separate arguments
$query = call_user_func_array(array($wpdb, 'prepare'), array_merge(array($sql), $villes));

Verwendete PHP-Funktionen:

  • implode() – Verbindet Array-Elemente zu einem string
  • array_fill() – Erstellt ein Array, das mit einem bestimmten Wert gefüllt ist.
  • call_user_func_array() – Ruft eine Funktion mit den als übergebenen Parametern auf array
  • array_merge() – Führt zwei zusammen Arrays

Dieser Ansatz stellt sicher, dass die Werte in $villes ordnungsgemäß maskiert und als separate Werte in der IN()-Bedingung behandelt werden.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3