什么是在mysql数据库中插入数组的所有可能方法

时间:2015-01-22 13:44:04

标签: php mysql

我有一个JSON出现数组,其中包含日期,值和数量,所以:

[["May 09 2014",1.17,63],["May 10 2014",1.01,171],["May 11 2014",1.56,87]]

我需要使用存储过程在MySQL数据库中插入此信息,因此我想知道实现此目的的所有可能方法是什么:

  1. php循环(但每个列表最多可出现200次)
  2. 解析存储过程中的XML字符串
  3. 创建一些疯狂的逻辑来解析存储过程中的字符串
  4. 还有另一种方法吗?

4 个答案:

答案 0 :(得分:3)

首先,从JSON创建PHP数组:

$jsonString = '[["May 09 2014",1.17,63],["May 10 2014",1.01,171],["May 11 2014",1.56,87]]';
$array = json_decode($jsonString);

现在循环该数组,生成插入并在单行中写入所有内容。 200个条目不是很多循环。

$query = "INSERT INTO `tableName` (`data`, `value`, `quantity`) VALUES ";
$inserts = [];
$params = [];

foreach ($array as $index => $row) {
    $inserts[] = "(:data{$index}, :value{$index}, :quantity{$index})";
    $params[] = [
        ":data{$index}" => $row[0],
        ":value{$index}" => $row[1],
        ":quantity{$index}" => $row[2],
    ];
}

$sql = $db->prepare($query.implode(', ', $inserts));
$sql->execute($params);

答案 1 :(得分:1)

你可以循环完成。 json_decode()它并循环遍历它,插入MySQL。不需要做200个请求,你可以通过将新的和新的部件连接到它来增加一个大的INSERT请求,然后在最后运行一次。像这样:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

代码如下:

$arr = json_decode($arr);
$data = [];
foreach($arr as $a) $data = "('".$a[0]."',".$a[1].",".$a[2].")";
mysqli_query("INSERT INTO tbl_name(a,b,c) VALUES". join(',', $data));

您也可以在文本字段中以普通JSON格式存储它 根据具体情况,这是最好的解决方案

答案 2 :(得分:0)

您可以使用json_decode()解码json字符串。

$json = '[["May 09 2014",1.17,63],["May 10 2014",1.01,171],["May 11 2014",1.56,87]]';
$occu_array = json_decode($json);

现在您可以迭代此数组并将数据行插入数据库。


迭代可以通过三种方式完成:

  1. 为数组中的每个项目提交插入。
  2. 使用一个insert命令为所有项构建一个sql并提交此单个sql。
  3. 使用多个insert命令构建一个sql,每个项目一个,并提交此单个sql。

答案 3 :(得分:0)

可以使用一个代码行构建SQL而无需迭代:

$sql = 'INSERT INTO table_name (col1, col2, col3) VALUES ' . substr(strtr(trim($json), '[]', '()'), 1, -1);

json字符串必须位于$json中。请考虑没有数据类型的转换。