Warnhinweis $ wpdb-> Bereite falsche Anzahl der übergebenen Argumente vor

Ich erhalte diesen Hinweis, wenn ich versuche, die function $ wpdb-> prepare zu verwenden:

Hinweis: wpdb :: prepare wurde falsch aufgerufen. Die Abfrage enthält nicht die richtige Anzahl von Platzhaltern (7) für die Anzahl der übergebenen Argumente (4). Weitere Informationen finden Sie unter Debugging in WordPress. (Diese Nachricht wurde in Version 4.8.3 hinzugefügt.) In C: \ wamp \ www \ wpml \ wp-includes \ functions.php in Zeile 4139

Ich habe mir andere Beiträge zu diesem Thema angesehen und sehe in den Threads in meinem Code keine der gleichen Probleme. Wenn ich diese Notiz entwickle, wird meine Anwendung stark verlangsamt, daher möchte ich eine Lösung finden.

function get_meta_range($meta_key) { global $wpdb; // $meta_key = '_price' $include = '7275,7266,7256,7237,7196,7192,7164'; $min = floor( $wpdb->get_var( $wpdb->prepare(' SELECT min(meta_value + 0) FROM %1$s LEFT JOIN %2$s ON %1$s.ID = %2$s.post_id WHERE ( meta_key =\'%3$s\' OR meta_key =\'%4$s\' ) AND meta_value != "" AND ( %1$s.ID IN (' . $include . ') )' , $wpdb->posts, $wpdb->postmeta, $meta_key, '_min_variation' . $meta_key ) ) ); // $min = 15 } 

Solutions Collecting From Web of "Warnhinweis $ wpdb-> Bereite falsche Anzahl der übergebenen Argumente vor"

Nummerierte Platzhalter funktionieren nicht wie erwartet und werden zu einem bestimmten Zeitpunkt in der Zukunft entfernt. Dies sollte als ungültige Syntax betrachtet werden.

Vor diesem Hintergrund beschreibt der Fehler das Problem: Ihre Abfrage enthält 7 Platzhalter, Sie übergeben jedoch nur 4 Werte. Für die wiederholten Werte müssen Sie sie nur wiederholen, wo Sie die Ersetzungen passieren.

Der wpdb::prepare sagt, dass Sie Platzhalter nicht wpdb::prepare sollten, aber in Ihrem Code gibt es:

 WHERE ( meta_key =\'%3$s\' OR meta_key =\'%4$s\' ) 

Denken Sie auch daran, dass die Metatabelle so entworfen wurde, dass sie schnell ist, wenn Sie die Post-ID bereits kennen, und WP holt bereits das gesamte Meta, wenn Sie einen Post ergattern.

Es wäre also viel schneller, get_post_meta zu verwenden und in PHP zu berechnen, da die Daten bereits angefordert wurden. Diese Abfrage ist sowohl unnötig als auch möglicherweise teuer