如何使用PHP将数据数组插入MySQL数据库

23
目前我有一个数组,通过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不是该表的主键*

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

问候。


2
你应该先停止使用 mysql_ 函数。接下来,你应该使用预处理语句。请参考这个问题了解如何操作。 - Kermit
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()); 
}

如何检索这个? - Iman Marashi

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;

另外一种方法是预处理语句,它们更适合你的情况。

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

我建议不要使用多个INSERT语句。 - Kermit
这只是一个快速而简单的解决方案来解决他的问题。 - Green Black
@John 我遇到了这个错误 PHP 致命错误:在非对象上调用成员函数 prepare() - BaconJuice
@baconjuice 首先你需要建立一个PDO连接。这只是一个例子。 - Green Black

0

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

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接