$ wpdb-> einfügen – Einfügen mehrerer Zeilen

Wie benutze ich $wpdb->insert um mehrere Zeilen einzufügen. Hier ist mein Code.

 for($i=0; $iinsert( 'WP_URLS', array( 'POSTID' => $post->ID, 'URL' => $_POST['url'.$i] ) ); } 

Dieser Code funktioniert nur für die erste Einfügung (dh wenn $i = 0 , wenn der Wert url_0 ). Manchmal wird die Anzahl der URLs mehr als 100 betragen und manchmal ist es null. Anstatt also den Code 100 Mal zu schreiben, möchte ich einfach eine einfache Schleife haben, die für eine beliebige Anzahl von Datensätzen funktioniert. Das ist der Grund, warum ich eine Schleife machte.

Danke für die Hilfe.

Die Tabellenstruktur ist

 CREATE TABLE WP_URLS ( POSTID BIGINT NOT NULL, URL VARCHAR(254) ); 

Solutions Collecting From Web of "$ wpdb-> einfügen – Einfügen mehrerer Zeilen"

Ich schätze, das Problem ist ziemlich einfach. Sie haben nicht den ganzen Code angezeigt, aber ich schätze, das Problem besteht darin, dass Sie die Einfügung aus einem unbekannten Grund als string in eine Variable mit dem Namen $stat speichern. Jedes Mal, wenn Sie die Variable mit einer neuen Abfrage füllen, überschreiben Sie Ihre Variable. Sie sollten stattdessen $stat .= $wpdb->insert( ...etc... ) verwenden. an deine Zeichenfolge anhängen. Vergessen Sie nicht, die Variable auf eine leere Zeichenfolge vor der Schleife zu setzen, damit Sie anfügen können: $stat = '' .


Ein anderer – besserer Weg – wäre die Verwendung eines Arrays. Grund: Sie können den Code leichter debuggen. Und pls lesen Sie den Kommentar i / t Code.

 $stats = array(); for( $i = 0; $i < = $urlCount; $i++ ) { $stats[] = array( 'POSTID' => $post->ID, // are you really retrieving **ALL** your urls as "url1", "url2", etc. // via some $_POST-ed form? 'URL' => filter_var( $_POST["url{$i}"], FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED ) ); } foreach ( $stats as $stat ) $wpdb->insert( 'WP_URLS', $stat ); 

Obwohl es eine akzeptierte Antwort gibt, arbeitet es mit separaten Abfragen für jede Einfügung.

Dies könnte eine bessere Lösung für das Einfügen von Daten in nur einer Abfrage sein:

 /** * A method for inserting multiple rows into the specified table * * Usage Example: * * $insert_arrays = array(); * foreach($assets as $asset) { * * $insert_arrays[] = array( * 'type' => "multiple_row_insert", * 'status' => 1, * 'name'=>$asset, * 'added_date' => current_time( 'mysql' ), * 'last_update' => current_time( 'mysql' )); * * } * * wp_insert_rows($insert_arrays); * * * @param array $row_arrays * @param string $wp_table_name * @return false|int * * @author Ugur Mirza ZEYREK * @source http://stackoverflow.com/a/12374838/1194797 */ function wp_insert_rows($row_arrays = array(), $wp_table_name) { global $wpdb; $wp_table_name = esc_sql($wp_table_name); // Setup arrays for Actual Values, and Placeholders $values = array(); $place_holders = array(); $query = ""; $query_columns = ""; $query .= "INSERT INTO {$wp_table_name} ("; foreach($row_arrays as $count => $row_array) { foreach($row_array as $key => $value) { if($count == 0) { if($query_columns) { $query_columns .= ",".$key.""; } else { $query_columns .= "".$key.""; } } $values[] = $value; if(is_numeric($value)) { if(isset($place_holders[$count])) { $place_holders[$count] .= ", '%d'"; } else { $place_holders[$count] .= "( '%d'"; } } else { if(isset($place_holders[$count])) { $place_holders[$count] .= ", '%s'"; } else { $place_holders[$count] .= "( '%s'"; } } } // mind closing the GAP $place_holders[$count] .= ")"; } $query .= " $query_columns ) VALUES "; $query .= implode(', ', $place_holders); if($wpdb->query($wpdb->prepare($query, $values))){ return true; } else { return false; } } 

Quelle: https://github.com/mirzazeyrek/wp-multiple-insert