WPDB-Platzhalter und zweites Argument für vorbereitete statementen

Wie kann ich Platzhalter und zweites Argument für diese Art von SQL Prepare setzen

$wpdb->prepare( "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'attachment' AND ID IN ('".implode("','",$slideshow_imgs)."') ORDER BY menu_order ASC" ); 

ANTWORTEN??

Ich mache es so und es gibt keinen Debug-Fehler:

 $str = 'attachment'; $ids_img = implode("','",$slideshow_imgs); $images = $wpdb->get_col($wpdb->prepare("SELECT ID FROM {$wpdb->posts} WHERE post_type = %s AND ID IN (%d) ORDER BY menu_order ASC",$str,$ids_img)); 

Solutions Collecting From Web of "WPDB-Platzhalter und zweites Argument für vorbereitete statementen"

Verwenden Sie einfach %s für die Zeichenfolge und %d für das Ersetzen von Ziffern. Vergessen Sie nicht, die richtigen esc_*() functionen zu verwenden (verwenden Sie die Volltextsuche für esc_ in der functionsreferenz ).

 global $wpdb; $wpdb->show_errors = true; $wpdb->suppress_errors = false; ! defined( 'DIEONDBERROR' ) and define( 'DIEONDBERROR', true ); $sql = < <posts} WHERE post_type = 'attachment' AND ID IN (%s) ORDER BY menu_order ASC SQL; # Make sure to `esc_*()` the arguments properly! $statement = $wpdb->prepare( $sql, implode( "','", $slideshow_imgs ) ); # Example: Query … there are other methods as well: $wpdb->query( $statement ); # DUMP the result and any possible errors var_dump( $wpdb->last_query, $wpdb->last_error ); 

Eine Alternative, anstatt SQL-Abfragen von Hand zu schreiben, ist zB:

 $post_ids = get_posts( [ 'fields' => 'ids', 'post_type' => 'attachments', 'orderby' => 'menu_order', 'order' => 'ASC', 'post__in' => wp_parse_id_list( $input_ids ) ] ); 

wobei die praktische corefunktion wp_parse_id_list () verwendet wird:

Bereinigen Sie eine Array-, Komma- oder durch Leerzeichen getrennte Liste von IDs.

Dies generiert die folgende SQL-Abfrage:

 SELECT wp_posts.ID FROM wp_posts WHERE 1=1 AND wp_posts.ID IN (1,2,3) AND wp_posts.post_type = 'attachments' AND (wp_posts.post_status = 'publish') ORDER BY wp_posts.menu_order ASC LIMIT 0, 5 

wenn $input_ids = [1,2,3] .

Aber post__in so wird die post__in Eingabe in WP_Query :

 $post__in = implode(',', array_map( 'absint', $q['post__in'] )); $where .= " AND {$wpdb->posts}.ID IN ($post__in)"; 

ps: Ich erinnere mich jetzt daran, ein Ticket # 34525 gepostet zu haben, das vorschlug, wp_parse_id_list() in WP_Query