(zuletzt bearbeitet )

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.

Werbung

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? Das wäre jedenfalls sehr nett! :-)

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. 😉

Andere Beiträge, die auf diesen Beitrag verlinken

23 Kommentare zu "WordPress 3.5 und "Warning: Missing argument 2 for wpdb::prepare()"" (RSS)

11. Dezember 2012 21:05 UhrAntworten#
Frank
Diesen Fehler habe ich leider auch und keine Ahnung, wie ich deine Lösung umsetzen soll. ☹
11. Dezember 2012 21:07 UhrAntworten#
Chris (Administrator)
Wenn du mir die Fehlermeldung schnell zuschickst, kann ich dir sagen wo du schauen musst. 🙂
11. Dezember 2012 21:12 UhrAntworten#
Frank
Oh, dass ist ja nett von Dir! 🙂

Warning: Missing argument 2 for wpdb::prepare(), called in /homepages/23/d407029611/htdocs/rundumsnetz/wp-content/themes/Backstreet/panel/sidebars.php on line 140 and defined in /homepages/23/d407029611/htdocs/rundumsnetz/wp-includes/wp-db.php on line 990

Ist der komplette Fehler und die PHP Zeile, wäre diese:

$widgetized_pages = $wpdb->get_col($wpdb->prepare("SELECT DISTINCT meta_value FROM $wpdb->postmeta WHERE meta_key = 'reedwan_page_sidebar'"));
11. Dezember 2012 21:15 UhrAntworten#
Chris (Administrator)
Probier's mal mit:

$widgetized_pages = $wpdb->get_col($wpdb->prepare("SELECT DISTINCT meta_value FROM $wpdb->postmeta WHERE meta_key = 'reedwan_page_sidebar'", null));

:-)
11. Dezember 2012 21:18 UhrAntworten#
Frank
wow, ein Wort rein und alles funktioniert wieder, vielen Dank, kann ich endlich ins Bett. 😛

hab leider kein plan von PHP, nur HTML. weiß nicht mal wofür diese Codezeile im Endeffekt da ist. 😉
11. Dezember 2012 21:23 UhrAntworten#
Chris (Administrator)
Gerne 🙂

Zur Codezeile: Sie soll die Abfrage von der MySQL-Datenbank vorbereiten und dann auch Daten aus der Datenbank holen.
Die Änderung sorgt nur dafür, dass WordPress weiß, dass man nichts Spezielles bei der Vorbereitung tun möchte.

Gute Nacht. 😉
11. Dezember 2012 23:56 UhrAntworten#
Ralf
Hallo Chris,
auch bin ein Leidender ohne Ahnung *g*. Vielleicht hättest du für mich auch einen Tip?
Warning: Missing argument 2 for wpdb::prepare(), called in /var/www/vhosts/sylvia-heimes.de/httpdocs/grenzkurier/wp-content/plugins/extended-categories-widget/libs/avh-db.php on line 62 and defined in /var/www/vhosts/sylvia-heimes.de/httpdocs/grenzkurier/wp-includes/wp-db.php on line 990

die entsprechende Zeile 990 lautet wie folgt:
function prepare( $query, $args ) {
if ( is_null( $query ) )
return;

Warning: Cannot modify header information - headers already sent by (output started at /var/www/vhosts/sylvia-heimes.de/httpdocs/grenzkurier/wp-includes/wp-db.php:990) in /var/www/vhosts/sylvia-heimes.de/httpdocs/grenzkurier/wp-includes/pluggable.php on line 876

hier lautet die entsprechende Zeile 876:
header("Location: $location", true, $status);
}
endif;

Danke dir im Vorraus, ich bin da leider ein kompletter Laie.
Viele Grüße
Ralf
12. Dezember 2012 12:09 UhrAntworten#
Chris (Administrator)
Schicke mir doch bitte Zeile 62 aus /wp-content/plugins/extended-categories-widget/libs/avh-db.php. 🙂

Grüße, Chris
12. Dezember 2012 11:30 UhrAntworten#
Anja
Hallo !

Ich habe das gleich Problem mit Count per Day.

Warning: Missing argument 2 for wpdbrepare(), called in /mnt/web6/e2/47/52251147/htdocs/wp-content/plugins/count-per-day/counter-core.php on line 217 and defined in /mnt/web6/e2/47/52251147/htdocs/wp-includes/wp-db.php on line 990

Kann mir hier jemand helfen?

lg
12. Dezember 2012 12:12 UhrAntworten#
Chris (Administrator)
Ersetze in /wp-content/plugins/count-per-day/counter-core.php die Zeile 217 durch:
$preparedSql = $wpdb->prepare($sql, null);

Bisher sollte da:
$preparedSql = $wpdb->prepare($sql);
stehen. 🙂
12. Dezember 2012 13:14 UhrAntworten#
Nico
also problem hab ich auch.... aber bei mir steht

function prepare( $query, $args ) {

wenn ich da einfach mal "null" reinschreibe dann geht gar nichts mehr .... kannst du auch bei mir so schenll helfen? 🙂
12. Dezember 2012 13:15 UhrAntworten#
Chris (Administrator)
Du musst nicht in /wp-includes/wp-db.php Änderungen vornehmen, sondern in der entsprechenden Datei des Plugins - die sollte ebenfalls samt Zeile im Warning genannt werden. 🙂
12. Dezember 2012 13:32 UhrAntworten#
Nico
nee quatsch so steht es im code:

$result = $wpdb->get_var($wpdb->prepare($q));

wenn ich aber "null" nach "prepare($q" einfüge da passiert... nix
12. Dezember 2012 13:35 UhrAntworten#
Chris (Administrator)
Probier's mal mit:
$result = $wpdb->get_var($wpdb->prepare($q, null));

:-)
12. Dezember 2012 13:37 UhrAntworten#
Nico
:-)

ups.. geht doch 🙂

vielen Dank!
13. Dezember 2012 17:49 UhrAntworten#
Frank
Oh, ich bin nicht der Einzigste mit diesem Problem, grins.
14. Dezember 2012 12:56 UhrAntworten#
Flipsy
hi, ich habe diese meldung und weiss leider nicht wo und was ich ändern soll.

Warning: Missing argument 2 for wpdb::prepare(), called in /www/htdocs/w00fa47f/Katzenpower/wp-content/plugins/nextgen-gallery/lib/tags.php on line 318 and defined in /www/htdocs/w00fa47f/Katzenpower/wp-includes/wp-db.php on line 991
14. Dezember 2012 13:06 UhrAntworten#
Chris (Administrator)
Hi.

Schicke mir doch bitte Zeile 318 der Datei /wp-content/plugins/nextgen-gallery/lib/tags.php zu. 🙂
14. Dezember 2012 13:08 UhrAntworten#
Flipsy
so sieht die zeile 318 aus......

$term_ids = $wpdb->get_col( $wpdb->prepare("SELECT term_id FROM $wpdb->terms WHERE slug IN ($sluglist) ORDER BY term_id ASC"));
14. Dezember 2012 13:19 UhrAntworten#
Chris (Administrator)
Probier mal:

$term_ids = $wpdb->get_col( $wpdb->prepare("SELECT term_id FROM $wpdb->terms WHERE slug IN ($sluglist) ORDER BY term_id ASC", null));

Die Funktion prepare() ist zwar nicht so gedacht, die Warning sollte allerdings verschwinden und der Plugin-Autor mit dem nächsten Update hoffentlich das Problem schöner lösen. 😉
14. Dezember 2012 13:26 Uhr • • #
Flipsy
sensationell es funktioniert, hatte auch die null am ende angegeben, aber ohne leerzeichen gesetzt....... danke viel mals.
14. Dezember 2012 13:32 Uhr • • #
Chris (Administrator)
Gerne. 🙂
18. Dezember 2012 00:21 UhrAntworten#
Thomas
Selbe Problem hier - ich dreh noch durch !! 🙂
Hoffe die bringen bald nen Update für mein Plugin.

Jetzt bist du dran: Was denkst du?

Bitte beachte: Auch wenn das Angeben einer E-Mail-Adresse optional ist, so bist du doch nicht vollständig anonym, denn u.a. deine IP-Adresse wird mit dem Absenden dieses Formulars gespeichert.



Tastenkürzel


Überall

j: Älterer Artikel

k: Neuerer Artikel

s: Suchen

h: Hilfe


Auf Artikel-Seiten

t: Auf Twitter posten

f: Auf Facebook posten

g: Auf Google+ posten