web-dev-qa-db-fra.com

Comment insérer plus d'une ligne de données dans une table à la fois

Je voudrais remplir une table personnalisée, avec plus d'une ligne de données à la fois. Si je supprime le second tableau, il insérera une ligne de données. Cependant, il ne sera pas ajouté les deux lignes en même temps. Comment insérer les deux lignes en même temps? Mon code:

function mp_install_name_data() {
    global $wpdb;
    $table_name = $wpdb->prefix . "names";

    $wpdb->insert(
        $table_name,
        array(
            'id' => '1',
            'name' => 'matt',
            'age' => '20',
            'point_one' => '0.45',
            'point_two' => '0.22'     
        ),

         array(
            'id' => '2',
            'name' =>'james',
            'age' => '6',
            'point_one' => '0.27',
            'point_two' => '0.17'  
        )
    );  

         }
1
mattnewbie

Vous pouvez utiliser une boucle foreach -

function mp_install_name_data() {
    global $wpdb;
    $table_name = $wpdb->prefix . "names";

    $rows = array(
        array(
            'id' => '1',
            'name' => 'matt',
            'age' => '20',
            'point_one' => '0.45',
            'point_two' => '0.22'     
        ),
        array(
            'id' => '2',
            'name' =>'james',
            'age' => '6',
            'point_one' => '0.27',
            'point_two' => '0.17'  
        )
    );

    foreach( $rows as $row )
    {
        $wpdb->insert( $table_name, $row);  
    }
}
2
Shazzad

Vous ne pouvez pas insérer plus d'une ligne à l'aide d'un seul appel à $wpdb->insert, mais vous pouvez utiliser $wpdb pour effectuer une requête SQL brute avec $wpdb->query.

Pour la syntaxe MySQL voir documentation .

N'oubliez pas d'utiliser $wpdb->prepare pour échapper des données avant de les insérer.

$wpdb->query( $wpdb->prepare(
  "INSERT INTO $table_name (id, name, age, point_one, point_two)
  VALUES (%d, %s, %d, %s, %s), (%d, %s, %d, %s, %s);"
), 1, 'matt', 20, '0.45', '0.22', 2, 'james', 6, '0.27', '0.17', );

Astuce: si vous configurez la colonne id pour qu'elle soit AUTOINCREMENT vous n'avez pas besoin de transmettre l'identifiant, il sera ajouté automatiquement.

2
gmazzap

Si les performances vous préoccupent, vous devriez envisager d’ajouter les instructions START TRANSACTION et COMMIT:

mysql_query('START TRANSACTION');
$res1 = mysql_query('query1');
$res2 = mysql_query('query2');
If ( $res1 && $res2 )
    mysql_query('COMMIT');
0
Carl