一尘不染

将多维php数组插入mysql数据库

mysql

我有一个来自csv的数组,其结构与此类似:

Array (
    [0] => Array ( [0] => name [1] => age [2] => gender )
    [1] => Array ( [0] => Ian [1] => 24 [2] => male )
    [2] => Array ( [0] => Janice [1] => 21 [2] => female )
     etc

我想将其插入到mysql表中,其中第一个数组的项(名称,年龄,性别)是列标题,而每个后续数组是表中的一行。

有人能建议我做这件事的最好方法,因为我撞墙了,这使我头疼!


阅读 519

收藏
2020-05-17

共1个答案

一尘不染

以下代码将起作用,但是假定所有嵌套数组的长度都相同,换句话说,每个嵌套数组都包含第一个嵌套数组中定义的所有属性的值。

$array = array(
    array('name', 'age', 'gender' ),
    array('Ian', 24, 'male'),
    array('Janice', 21, 'female')
);

$fields = implode(', ', array_shift($array));

$values = array();
foreach ($array as $rowValues) {
    foreach ($rowValues as $key => $rowValue) {
         $rowValues[$key] = mysql_real_escape_string($rowValues[$key]);
    }

    $values[] = "(" . implode(', ', $rowValues) . ")";
}

$query = "INSERT INTO table_name ($fields) VALUES (" . implode (', ', $values) . ")";

只要所有其他嵌套数组的长度相同,该解决方案就可以与第一个嵌套数组中定义的任意数量的属性一起使用。对于上面的数组,输出将是:

INSERT INTO table_name (name, age, gender) VALUES (Ian, 24, male), (Janice, 21, female)

有关演示,请参见http://codepad.org/7SG7lHaH,但请注意,由于它们不允许使用该功能,因此删除了对codepad.org上的mysql_real_escape_string()的调用。在您自己的代码中,您应该使用它。

2020-05-17