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'
)
);
}
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);
}
}
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.
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');