将数组插入mysqldb

时间:2014-01-17 21:47:23

标签: php arrays

我正在尝试插入以下数组(来自html表单),但我相信我正在以非常糟糕的方式使用此数组

数组:

Array (
    [0] => Array (
        [0] => local
        [1] => file
        [2] => a

    )
    [1] => Array (
        [0] => remote
        [1] => image
        [2] => b
    )
)

实际代码:

<?php
if(isset($_POST)==true && empty($_POST)==false){ 
$dataa = ($_POST['code_list']);
}
$data = array_chunk($_POST['code_list'],6);

foreach ($data as  $type=>$ba) {
    echo "INSERT INTO table(f1, f2, f3,) values (";
    foreach ($ba as $a) {
        echo "'$a',";
    }
    echo ");<br>";
}

&GT;

当前输出:

INSERT INTO table(f1, f2, f3,) values ('local','file','a',);
INSERT INTO table(f1, f2, f3,) values ('remote','image','b',);

什么是体面的方式呢?

编辑:无需显示如何连接数据库,我只需要处理数组数据。

1 个答案:

答案 0 :(得分:1)

一些评论:

  • 您应该切换到PDO或mysqli并使用带有绑定变量的预准备语句。现在你有一个严重的SQL注入问题;
  • 您可以在一个插入语句中组合多个插入:INSERT ... VALUES ('local','file','a'),('remote','image','b'),(etc.)
    您也可以准备一次语句然后多次执行,但组合会更有效,特别是对于越来越多的插入

PDO中的一个简单(不完整且未经测试的......)示例:

$sql = 'INSERT INTO table(f1, f2, f3) VALUES ';
$values = array();
$valCount = 1;
foreach ($data as  $type=>$ba) {
  $row = array();
  foreach ($ba as $a) {
     $val = ":value{$valCount}";
     $row[] = $val;
     $values[$val] = $a;
     $valCount++;
  }
  $sql .= '(' . implode(', ', $row) . '),';
}
$sql = rtrim($slq, ',');

// execute the sql statement using PDO
$stmt = $db->prepare($sql);
$stmt->execute($values);

在循环结束和修剪时,sql应如下所示:

INSERT INTO table(f1, f2, f3) VALUES (:value1, :value2, :value3),(:value4, :value5, :value6)

值数组的键值应为:value1 - :value6