【问题标题】:How to insert array of data into mysql using php如何使用php将数据数组插入mysql
【发布时间】:2013-02-21 22:11:17
【问题描述】:

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

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

问候。

【问题讨论】:

  • 你应该先停止使用mysql_函数。接下来,您应该使用准备好的语句。 See this question 如何做到这一点。

标签: php mysql


【解决方案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 支持多次插入like

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,它更适合您的情况。

【讨论】:

    【解决方案3】:
    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'] ));
     }
    

    【讨论】:

    • 我建议不要使用多个 INSERT 声明。
    • 这只是他的问题的快速而肮脏的解决方案。
    • @John 我收到此错误 PHP 致命错误:在非对象上调用成员函数 prepare()
    • @baconjuice 你必须先建立一个 PDO 连接。这只是一个例子。
    【解决方案4】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-21
      • 2011-08-11
      • 2012-04-20
      • 2011-06-13
      相关资源
      最近更新 更多