22

目前,当通过 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

4 回答 4

34

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

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()); 
}
于 2013-02-21T22:21:34.983 回答
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,它更适合您的情况。

于 2013-02-21T22:20:15.340 回答
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'] ));
 }
于 2013-02-21T22:14:51.323 回答
0

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

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

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

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

于 2018-06-05T11:00:29.773 回答