首页 > 解决方案 > PHP:将带有单独行的数组作为值插入数据库

问题描述

我正在通过 ajax 将一个数组传递给 PHP,我想将它们作为一行插入到 mysql 中。有没有办法我可以做到这一点?

Javascript:

var textarray = [];
for(var i = 0; i<data.length; i++){
  var sms = $('#TxtMessage').val();
  var brand = data[i].brand;
  var type = data[i].type;
  var csvLine = `${sms}, ${brand}, ${type} `;
  textarray.push(csvLine)
}

var resultCSV = textarray.join('\n');

//Pass the array to PHP
$.ajax({
  type: "POST",
  url: "../php/functions.php",
  data: { results: resultCSV },
  success: function(data) {
       console.log(data);
  }
});

在 PHP 中,我想将每一行插入 mysql 数据库。我传递给 PHP 的值如下所示

sample text, Toyota, 30/10/2008 10:00:00 
sample text, Nissan, 17/02/2021 14:00:00 

所以文本的每一行都应该作为一行进入数据库。

PHP:

$myArray = $_POST['results'];
$columns = implode(" ",array_keys($myArray));
$escaped_values = array_map('mysql_real_escape_string', array_values($myArray));
$values  = implode(", ", $escaped_values);
$sql = "INSERT INTO `databasetable`($columns) VALUES ($values)";

标签: php

解决方案


人们通常做的是使用 json 之类的东西来编码和解码他们传递的数据。这比你正在做的要容易得多。

你编码喜欢

$myVar = json_encode($dataArray);

你解码像

$myReturn = json_decode($_POST['csvDataArray']);

如果要将 csv 转换为数组,可以使用

$mycsvArray = array_map("str_getcsv", explode("\n", $csv));

您可能需要使用stripslashes。

然后就像循环构建查询一样简单。像这样的东西。

$myQuery = array();
foreach($myCSVArray as $rowArray) {
  $myQuery[] = INSERT INTO `databasetable`($columns) VALUES ($escaped_values);
}

推荐阅读