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

2022-08-30 19:04:35

目前我有一个数组,当输出到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
        )  
)

我想将此数据插入一个表中,每个元素值都属于其各自的字段。

目前我的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不是此表中的主键。

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

问候。


答案 1

我会避免为每个条目做一个查询。

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

答案 2

首先,您应该停止使用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;

另一种方法是准备语句,这甚至更适合您的情况。


推荐