Auf Google Plus hatte ich es bereits angedeutet: Beim Update von WordPress auf Version 3.5 hat sich leider herausgestellt, dass eines der von uns verwendeten Plugins nicht mehr fehlerfrei funktioniert.
Folgende Warnung (gekürzt) wurde ausgegeben:
Warning: Missing argument 2 for wpdb::prepare(), called in *.php on line * and defined in */wp-includes/wp-db.php on line 990
Beim Versuch, es zu reparieren, (und damit beim googlen 😛) fiel mir auf, dass von der Warning, die das Plugin erzeugte, scheinbar auch andere Plugins betroffen sind.
Der Grund: WordPress hat die Funktion prepare() in der Klasse wpdb (SQL-Funktion) verändert: Sie benötigt nun zwei Parameter.
Alte Zeile in WordPress 3.4.2 (Zeile 893):
function prepare( $query = null ) { // ( $query, *$args )
Neue Zeile in WordPress 3.5 (Zeile 990):
function prepare( $query, $args ) {
Die Funktion dient dazu, einen SQL-Befehl für seine Ausführung vorzubereiten.
Anders als bisher müssen die zu veränderten Teile des Befehles nun explizit als Parameter angegeben werden - die Angabe ist nicht mehr optional.
Als schnelle Behebung des Problems kann man z.B. als zweites Argument beim Aufrufen null wählen (prepare(myQuery, null);) oder den prepare-Aufrufe einfach entfernen, wenn sowieso nur ein Parameter (das $query) übergeben wird.
Werbeblocker aktiv?
Vermutlich aufgrund eines Werbeblockers kann an dieser Stelle leider keine Werbung angezeigt werden. Als Blog ist diese Website jedoch darauf angewiesen, um diverse Kosten abdecken zu können. Vielleicht möchtest du Servaholics ja in deinem Werbeblocker als Ausnahme hinzufügen und so unterstützen? 🙂
Update vom 12. Dezember:
Seit heute Morgen gibt es ein offizielles "Statement" zu dieser Änderung: make.wordpress.org.
Die prepare-Funktion soll eigentlich vor SQL-Injections schützen, indem sie Variablen im SQL-Befehl validiert.
Wie genau Plugin-Autoren ihre Plugins anpassen sollen, wird ebenfalls im oben genannten Artikel erklärt. PHPler können die Änderungen auch jetzt schon selbst vornehmen. 😉