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

时间:2013-02-21 22:11:18

标签: 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
        )  
)

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

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

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

问候。

4 个答案:

答案 0 :(得分: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()); 
}

答案 1 :(得分: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');

你必须在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,它更适合你的情况。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

我有一个PHP库,有助于将数组插入MySQL数据库。通过使用此功能,您可以创建更新和删除。您的数组键值应与表列值相同。  只需使用单行代码进行创建操作

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

其中$ db是您的数据库连接。

同样,您可以使用它进行更新和删除。选择操作即将推出。 Github链接下载:https://github.com/pairavanvvl/crud