ti-enxame.com

Como inserir uma matriz de dados no mysql usando php

Atualmente eu tenho uma matriz que se parece com o seguinte quando a saída através 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
        )  
)

Eu gostaria de inserir esses dados em uma tabela com cada valor de elemento pertencente ao respectivo campo.

Atualmente meu código php parece com o seguinte

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()); 
    }
}

* Nota: R_ID NÃO é a chave primária nesta tabela. *

Alguém pode me ajudar a entender como devo abordar essa situação? Obrigado pela leitura e sua ajuda!

Saudações.

20
BaconJuice

Eu evitaria fazer uma consulta para cada entrada.

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

Primeiro de tudo você deve parar de usar o mysql_ *. MySQL suporta múltiplas inserções como

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

Você apenas tem que construir uma string em seu loop foreach que se parece com isso

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

e depois inseri-lo depois do loop

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

Outra forma seria Declarações preparadas , que são ainda mais adequadas para sua situação.

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()); 
    }
}

Um melhor exemplo de solução com o 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

Eu tenho uma biblioteca PHP que ajuda a inserir o array no banco de dados MySQL. Ao usar isso, você pode criar atualização e exclusão. Seu valor de chave de matriz deve ser o mesmo que o valor da coluna da tabela. Apenas usando um código de linha única para a operação de criação

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

onde $ db é sua conexão de banco de dados.

Da mesma forma, você pode usar isso para atualização e exclusão. Selecione operação estará disponível em breve. Github link para download: https://github.com/pairavanvvl/crud

0
Bairu