Formation PUB020 : WordPress, 2023 Les données personnalisées WordPress

31.4 Insérer plusieurs enregistrements dans une table


La méthode $wpdb->insert() permet d'insérer un enregistrement dans une table sous WordPress.

▼Publicité Le texte se poursuit plus bas

Insertion d'un seul enregistrement

Lorsqu'un seul enregistrement doit être inséré, cet extrait de code fait bien l'affaire.

WordPress (PHP)

$reussite = $wpdb->insert(
    $table_matable,
    [
        'champ1' => 'une chaîne',
        'champ2' => 9,
    ],
    [
        '%s',
        '%d',
    ]
);
 
if ( ! $reussite ) {
    // réagir en cas de problème
    monprefixe_log_debug( $wpdb->last_error );
    // ...
}

Cependant, lorsqu'on doit insérer une série d'enregistrements dans une table, le code peut devenir très long. 

Insertion de plusieurs enregistrements

L'algorithme suivant permettra de coder plus facilement l'enregistrement de plusieurs enregistrements.

WordPress (PHP)

$donnees = [
    [ 'chaîne 1', 10, '2021-09-28' ],    // données du premier enregistrement
    [ 'chaîne 2', 20, '2021-08-03' ],    // données du deuxième enregistrement
    // ...
];
 
foreach( $donnees as $donnee ) {
    // à chaque boucle, va chercher les informations pour un enregistrement dans le tableau de données
    $reussite = $wpdb->insert(
        $table_matable,
        [
            'champ1' => $donnee[0],
            'champ2' => $donnee[1],
            'champ3' => $donnee[2],
        ],
        [
            '%s',
            '%d',
            '%s',
        ]
    );
 
    if ( ! $reussite ) {
        // réagir en cas de problème
       monprefixe_log_debug( $wpdb->last_error );
        // ...
    }
}

Insertion de plusieurs enregistrements avec clés étrangères

Dans le cas où il faut insérer des données dans deux tables liées, on prendra soin de retenir les identifiants de la table parent afin de les utiliser correctement dans la table enfant.

WordPress (PHP)

$id = []; // Pour stocker les identifiants à utiliser comme clés étrangères dans la table enfant.
$erreur = false;
 
$donneesTableParent = [
    [ 'chaîne 1', 10, '2021-09-28' ],    // données du premier enregistrement
    [ 'chaîne 2', 20, '2021-08-03' ],    // données du deuxième enregistrement
    // ...
];


// Le premier champ est la clé étrangère.
// On y inscrit 1 si l'enregistrement est lié au premier enregistrement dans la table parent, 2 pour le 2e, etc.

$donneesTableEnfant = [
    [ 1, 'description 1' ],
    [ 1, 'description 2' ],
    [ 2, 'description 3' ],
    [ 1, 'description 4' ],
    [ 2, 'description 5' ],
    [ 2, 'description 6' ],
    [ 1, 'description 7' ],
    // ...
];
 
foreach( $donneesTableParent as $donnee ) {
    // à chaque boucle, va chercher les informations pour un enregistrement dans le tableau de données
    $reussite = $wpdb->insert(
        $table_matable,
        [
            'champ1' => $donnee[0],
            'champ2' => $donnee[1],
            'champ3' => $donnee[2],
        ],
        [
            '%s',
            '%d',
            '%s',
        ]
    );
 
    $id[] = $wpdb->insert_id;   // retient l'identifiant
   
    if ( ! $reussite ) {
        // réagir en cas de problème
       monprefixe_log_debug( $wpdb->last_error );
        $erreur = true;
        // ...
    }
}

// Inutile de poursuivre si les enregistrements de la table parent n'ont pas tous fonctionné.
if ( ! $erreur ) {
    foreach( $donneesTableEnfant as $donnee ) {
        $reussite = $wpdb->insert(
            $table_matable,
            [
                'champ1' => $id[$donnee[0] - 1],   // Si on a mis 1, on veut l'élément 0 du tableau $[id].
                'champ2' => $donnee[1],
            ],
            [
                '%d',
                '%s',
            ]
        );
   
        if ( ! $reussite ) {
            // réagir en cas de problème
           monprefixe_log_debug( $wpdb->last_error );
            // ...
        }
    }
}

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Par Christiane Lagacé
Dernière révision le 23 mai 2023
Merci de partager !

Site fièrement hébergé chez A2 Hosting.

Soumettre