Saltar al contenido

Wordpress $wpdb. Insertar varios registros

Este equipo de redactores ha estado largas horas buscando para dar espuestas a tu interrogante, te ofrecemos la soluciones de modo que esperamos resultarte de gran apoyo.

Solución:

Bien, ¡lo descubrí!

Configuración de matrices para valores reales y marcadores de posición

$values = array();
$place_holders = array();

la consulta inicial:

$query = "INSERT INTO orders (order_id, product_id, quantity) VALUES ";

Luego recorra los valores que desea agregar e insértelos en las matrices apropiadas:

foreach ( $_POST as $key => $value ) 
     array_push( $values, $value, $order_id );
     $place_holders[] = "('%d', '%d')" /* In my case, i know they will always be integers */

Luego agregue estos bits a la consulta inicial:

$query .= implode( ', ', $place_holders );
$wpdb->query( $wpdb->prepare( "$query ", $values ) );

También puede usar esta forma de construir la consulta:

$values = array();

// We're preparing each DB item on it's own. Makes the code cleaner.
foreach ( $items as $key => $value ) 
    $values[] = $wpdb->prepare( "(%d,%d)", $key, $value );


$query = "INSERT INTO orders (order_id, product_id, quantity) VALUES ";
$query .= implode( ",n", $values );

Me encontré con este problema y decidí crear una función más mejorada utilizando también la respuesta aceptada:

/**
 * 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;
    


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

Puntuaciones y reseñas

No se te olvide dar difusión a esta sección si lograste el éxito.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *