it-swarm.com.de

Erstellt $ wpdb-> prepare keine vorbereitete Anweisung, die ich mehrmals ausführen kann?

Ich wundere mich von der Syntax

$sql = $wpdb->prepare( 'query' [, value_parameter, value_parameter ... ] )

Es scheint (aus der Syntax - Werte innerhalb von prepare), dass es sich einfach um Werte handelt, die eine vorbereitete Anweisung nicht beschädigen und mir Leistungsvorteile verschaffen, wenn ich sie mehrmals ausführe. Werden verschiedene Parameter verwendet?

Auf den zweiten Blick, da Werte optional sind, kann ich sie nach der Vorbereitung einstellen? Wie mache ich das?

5
JM at Work

$wpdb-prepare funktioniert wie sprintf und vsprintf. Das erste Argument ist immer eine Formatzeichenfolge.

Die einzigen zulässigen Formatangaben sind %s und %d. Andere habe ich noch nie getestet, können aber laut Codex zu Analysefehlern führen. Sie müssen das Literal% in Ihrer Abfrage mit% schließen, z. B .: %%

Wenn Sie es wie sprintf verwenden, was nur möglich ist, wenn Sie die Anzahl der Argumente vor der Laufzeit kennen, können Sie die Anzahl der Argumente der Anzahl der Formatbezeichner in Ihrer Formatzeichenfolge anpassen.

Zum Beispiel: $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}_votes WHERE post_id = %d AND username = %s", $post_id, $username );

Wenn Sie die Anzahl der Argumente bis zur Laufzeit nicht kennen, müssen Sie sie wie vsprintf verwenden. In diesem Fall ist das erste Argument ein Formatbezeichner, das zweite ein Array.

Zum Beispiel: $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}_votes WHERE post_id = %d AND username = %s", array( $post_id, $username ) );

$wpdb->prepare gibt eine SQL QUERY-Zeichenfolge zurück, die Sie beliebig oft ausführen können.

Für die obigen Beispiele lautet die resultierende Abfrage: SELECT * FROM wp_votes WHERE post_id = 747 AND username = 'cooluser'

4

Ich denke, es versteht sich von selbst, dass Entwickler erwarten, dass eine "vorbereitete" Anweisung bedeutet, dass sie "vorbereitet" in der Datenbank ist !

In einer Unterfrage wurde gefragt, ob die Anweisung immer wieder verwendet werden kann. Das wpdb-> prepare "bereitet" die Anweisung nicht wirklich vor. Es werden nur die Eingänge bereinigt. Sie können dies in folgender Datei sehen: wordpress/wp-includes/wp-db.php. Suchen Sie nach der Vorbereitungsfunktion, und Sie sehen, dass nur eine normale, nicht vorbereitete Abfrage erstellt wird:

$query = array_shift($args);
$query = str_replace("'%s'", '%s', $query);
$query = str_replace('"%s"', '%s', $query);
$query = str_replace('%s', "'%s'", $query); // quote the strings
array_walk($args, array(&$this, 'escape_by_ref'));
return @vsprintf($query, $args); 

Grundsätzlich sollte die Funktion wpdb-> prepare als "bereinigen" oder "bereinigen" oder so ähnlich bezeichnet werden. Es "vorzubereiten" zu nennen, ist irreführend für jeden, der SQL kennt.

5
user49582