【问题标题】:Insert array to mysqldb将数组插入mysqldb
【发布时间】:2014-02-07 09:51:56
【问题描述】:

我正在尝试插入以下数组(来自 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>";
}

?>

当前输出:

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

什么是体面的方法?

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

【问题讨论】:

  • 如果您将所有项目添加为不同的行,那么这是我假设的正确方式。你唯一需要注意的是从查询中取出最后一个额外的东西

标签: php arrays


【解决方案1】:

几个cmets:

  • 您应该切换到 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 的键和你的值。

【讨论】:

  • 你能举个例子我怎么能使用数组来使用它?
  • @Thales 我添加了一个示例,但它未经测试,因此您需要检查 sql 字符串和值数组是否正确构建。
  • 我只需要替换一些变量,但这比我预期的要好!非常感谢
猜你喜欢
  • 1970-01-01
  • 2013-02-02
  • 2015-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-21
相关资源
最近更新 更多