web-dev-qa-db-fra.com

Comment insérer un tableau de données dans mysql en utilisant php

Actuellement, j'ai un tableau qui ressemble à ce qui suit lors de la sortie de print_r ();

Array
(
    [0] => Array
        (
            [R_ID] => 32
            [email] => [email protected]
            [name] => Bob
        )

    [1] => Array
        (
            [R_ID] => 32
            [email] => [email protected]
            [name] => Dan
        )

    [2] => Array
        (
            [R_ID] => 32
            [email] => [email protected]
            [name] => Paul
        )

    [3] => Array
        (
            [R_ID] => 35
            [email] => [email protected]
            [name] => Mike
        )  
)

Je voudrais insérer ces données dans une table avec chaque valeur d'élément appartenant à son champ respectif.

Actuellement, mon code php ressemble à ceci

if(is_array($EMailArr)){
    foreach($EMailArr as $R_ID => $email => $name){

    $sql = "INSERT INTO email_list (R_ID, EMAIL, NAME) values ('$R_ID', '$email', '$name')";
    mysql_query($sql) or exit(mysql_error()); 
    }
}

* Remarque: R_ID n'est PAS la clé primaire de cette table. *

Quelqu'un peut-il m'aider à comprendre comment je devrais aborder cette situation? Merci de votre lecture et de votre aide!

Cordialement.

20
BaconJuice

J'éviterais de faire une requête pour chaque entrée.

if(is_array($EMailArr)){

    $sql = "INSERT INTO email_list (R_ID, EMAIL, NAME) values ";

    $valuesArr = array();
    foreach($EMailArr as $row){

        $R_ID = (int) $row['R_ID'];
        $email = mysql_real_escape_string( $row['email'] );
        $name = mysql_real_escape_string( $row['name'] );

        $valuesArr[] = "('$R_ID', '$email', '$name')";
    }

    $sql .= implode(',', $valuesArr);

    mysql_query($sql) or exit(mysql_error()); 
}
31
dxvargas

Tout d’abord, vous devriez arrêter d’utiliser mysql_ *. MySQL supporte l’insertion multiple comme

INSERT INTO example
VALUES
  (100, 'Name 1', 'Value 1', 'Other 1'),
  (101, 'Name 2', 'Value 2', 'Other 2'),
  (102, 'Name 3', 'Value 3', 'Other 3'),
  (103, 'Name 4', 'Value 4', 'Other 4');

Vous devez juste construire one string dans votre boucle foreach qui ressemble à ça

$values = "(100, 'Name 1', 'Value 1', 'Other 1'), (100, 'Name 1', 'Value 1', 'Other 1'), (100, 'Name 1', 'Value 1', 'Other 1')";

puis insérez-le après la boucle

$sql = "INSERT INTO email_list (R_ID, EMAIL, NAME) VALUES ".$values;

Une autre façon serait Déclarations préparées , qui sont encore plus adaptées à votre situation.

9
Chris
if(is_array($EMailArr)){
    foreach($EMailArr as $key => $value){

    $R_ID = (int) $value['R_ID'];
    $email = mysql_real_escape_string( $value['email'] );
    $name = mysql_real_escape_string( $value['name'] );

    $sql = "INSERT INTO email_list (R_ID, EMAIL, NAME) values ('$R_ID', '$email', '$name')";
    mysql_query($sql) or exit(mysql_error()); 
    }
}

Un meilleur exemple de solution avec PDO:

 $q = $sql->prepare("INSERT INTO `email_list` 
                     SET `R_ID` = ?, `EMAIL` = ?, `NAME` = ?");

 foreach($EMailArr as $value){
   $q ->execute( array( $value['R_ID'], $value['email'], $value['name'] ));
 }
1
Green Black

J'ai une bibliothèque PHP qui aide à insérer un tableau dans la base de données MySQL. En utilisant cela, vous pouvez créer une mise à jour et une suppression. La valeur de votre clé de tableau doit être identique à celle de la colonne de la table. En utilisant simplement un code d'une seule ligne pour l'opération de création

DB::create($db, 'YOUR_TABLE_NAME', $dataArray);

où $ db est votre connexion à la base de données.

De même, vous pouvez l'utiliser pour mettre à jour et supprimer. Cette opération sera bientôt disponible . Lien Github à télécharger: https://github.com/pairavanvvl/crud

0
Bairu