如何使用php将数据数组插入mysql

Bac*_*ice 21 php mysql

目前我有一个数组,通过print_r()输出时看起来如下;

Array
(
    [0] => Array
        (
            [R_ID] => 32
            [email] => a@a.com
            [name] => Bob
        )

    [1] => Array
        (
            [R_ID] => 32
            [email] => b@b.com
            [name] => Dan
        )

    [2] => Array
        (
            [R_ID] => 32
            [email] => c@c.com
            [name] => Paul
        )

    [3] => Array
        (
            [R_ID] => 35
            [email] => d@d.com
            [name] => Mike
        )  
)
Run Code Online (Sandbox Code Playgroud)

我想将这些数据插入到一个表中,每个元素值属于其各自的字段.

目前我的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()); 
    }
}
Run Code Online (Sandbox Code Playgroud)

*注意:R_ID不是此表中的主键.*

有人可以帮我理解我应该如何应对这种情况吗?感谢您的阅读和帮助!

问候.

dxv*_*gas 32

我会避免对每个条目进行查询.

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()); 
}
Run Code Online (Sandbox Code Playgroud)


Chr*_*ris 9

首先,你应该停止使用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');
Run Code Online (Sandbox Code Playgroud)

你只需要在foreach循环中构建一个字符串,就像那样

$values = "(100, 'Name 1', 'Value 1', 'Other 1'), (100, 'Name 1', 'Value 1', 'Other 1'), (100, 'Name 1', 'Value 1', 'Other 1')";
Run Code Online (Sandbox Code Playgroud)

然后在循环后插入它

$sql = "INSERT INTO email_list (R_ID, EMAIL, NAME) VALUES ".$values;
Run Code Online (Sandbox Code Playgroud)

另一种方式是准备声明,它更适合您的情况.