2013-02-21 20 views
20

現在、私はprint_r();の出力時に次のような配列を持っています。PHPを使ってmysqlにデータの配列を挿入するには

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

私はこのデータをそれぞれのフィールドに属する各要素値と共に1つのテーブルに挿入したいと考えています。

は、現在、私のPHPコードは以下の

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

*注のようになります。R_IDは、このテーブルの主キーではありません*

誰かが私はこのような状況にアプローチする方法を理解するのに役立つことはできますか?読んでいただきありがとうございました!

よろしくお願いいたします。

+2

「mysql_」関数の使用をやめてください。 次に、準備済みの文を使用する必要があります。 [この質問を参照](http://stackoverflow.com/questions/14860606/mysqli-inserting-multiple-rows-withone-prepared-statement)を参照してください。 – Kermit

答えて

31

各エントリのクエリを実行しないでください。

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

ありがとうございます。 – BaconJuice

+0

これを取得するには? –

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

PDOとのより良い例ソリューション:あなたは* mysql_の使用を停止する必要があり、すべての

$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'])); 
} 
+0

私は複数の 'INSERT'ステートメントに対して助言します。 – Kermit

+0

これは彼の問題に対するちょっとした問題です。 –

+0

@Johnこのエラーが発生するPHP致命的なエラー:非オブジェクト上のメンバ関数prepare()を呼び出す – BaconJuice

8

まず。 のMySQLのようなあなただけでは

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

のように見えるあなたのforeachループで1つの文字列を構築し、ループ

$sql = "INSERT INTO email_list (R_ID, EMAIL, NAME) VALUES ".$values; 
後にそれを挿入する必要があり

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

を挿入する複数のサポート

もう1つの方法はPrepared Statementsで、これはあなたの状況にさらに適しています。

関連する問題