2013-02-21 51 views
20

目前我有一個數組,看起來像下面時輸出通過print_r();如何插入數組數據到MySQL使用PHP

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

我想插入這個數據到一個表中,每個元素值屬於其各自的字段。

目前我的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-with-one-prepared-statement)如何做到這一點。 – Kermit 2013-02-21 22:15:06

回答

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 2013-02-22 14:07:16

+0

如何檢索? – 2016-02-22 18:31:37

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一個更好的例子解決方案:

所有的
$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 2013-02-21 22:15:25

+0

這只是他的問題的一個快速和骯髒的解決方案。 – 2013-02-21 22:15:57

+0

@John我得到這個錯誤PHP致命錯誤:調用一個非對象的成員函數prepare() – BaconJuice 2013-02-21 23:06:24

8

首先,你應該停止使用mysql_ *。 MySQL支持多種插入像

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

你只需要建立一個字符串在你的foreach循環,它看起來像那

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

,然後在循環後插入

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

另一種方法是Prepared Statements,它更適合您的情況。