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? 🙂

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

Deine Meinung zu diesem Artikel?


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

Diesen Fehler habe ich leider auch und keine Ahnung, wie ich deine Lösung umsetzen soll. ☹
Wenn du mir die Fehlermeldung schnell zuschickst, kann ich dir sagen wo du schauen musst. 🙂
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'"));
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));

:-)
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. 😉
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. 😉
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
Schicke mir doch bitte Zeile 62 aus /wp-content/plugins/extended-categories-widget/libs/avh-db.php. 🙂

Grüße, Chris
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
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. 🙂
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? 🙂
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. 🙂
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
Probier's mal mit:
$result = $wpdb->get_var($wpdb->prepare($q, null));

:-)
:-)

ups.. geht doch 🙂

vielen Dank!
Oh, ich bin nicht der Einzigste mit diesem Problem, grins.
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
Hi.

Schicke mir doch bitte Zeile 318 der Datei /wp-content/plugins/nextgen-gallery/lib/tags.php zu. 🙂
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"));
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. 😉
sensationell es funktioniert, hatte auch die null am ende angegeben, aber ohne leerzeichen gesetzt....... danke viel mals.
Gerne. 🙂
Selbe Problem hier - ich dreh noch durch !! 🙂
Hoffe die bringen bald nen Update für mein Plugin.