我已经为我的上一个问题找到了一些解决方案:Trouble inserting data from csv into mysql database with unknown number of columns,所以让我解释一下我现在的问题。 由于我的应用程序的用户可以在我的数据库的表中创建自定义列,因此我通过运行此查询找到了存储列的数量和名称的方法:
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name='$tblname'"
我将结果存储在$anotherArray
变量中。现在,由于我的用户可以选择将CSV
文件导入其自定义表(具有自定义列数),我这样做了:
$file = $_FILES['file']['tmp_name'];
$handle = fopen($file, "r");
$name = $_FILES['file']['name'];
if (strrpos($name, '.csv', -4)) {//recognises if uploaded file is .csv
do {
if ($data[0]) {
$query = "INSERT INTO $tabela (";
$last = end($anotherArray);//$anotherArray holds names and number of columns user have made
foreach ($anotherArray as $something) {
if ($something != $last) {
$query .= "" . $something . ",";
} else {
$query .= "" . $something . ")";
}
}
$query .= "VALUES (";
请再次注意,这是一个测试文件,一些用户可能会在他的表中生成9个自定义列,并且他的文档在csv文件的一行中将有9个值。 我制作了脚本的这一部分,用csv的值创建一个数组:
$lengtara = count($anotherArray);
$length1 = count($data);//$data is array with csv file values
$nizDuzina = count($anotherArray);
$restructured1 = [];
for ($i = 0; $i < $length1; $i += $nizDuzina) { // note the $i+=$nizDuzina increments $i by number of columns in database table.
for ($j = 0; $j < $nizDuzina; $j++) {
$restructed1 [$j] = $data[$i + $j];//this is a key thing in my script!
}
}
}
}
while ($data = fgetcsv($handle, 1000, ",", "'")) ;
$query = rtrim($query, ',');
$query .= ")";
//var_dump($query);
$rez = $mysqli->query($query);
所以,当我print_r($restructed1)
时,我得到一个这样的数组:
Array ( [0] => 123123123 [1] => Ognjen [2] => Babic ) Array ( [0] => 23423423 [1] => Neven [2] => Babic ) Array ( [0] => 235646345 [1] => Vanja [2] => Babic ) Array ( [0] => 4853424 [1] => Nikola [2] => Babic ) Array ( [0] => 34545747 [1] => Viktor [2] => Sovilj )
现在这是我的问题的一个关键点:如何将这样的数组导入到数据库中,但是以一些动态的,通用的方式,所以如果我的数组中的数组有,那么它可以适用于exaple 2或7个元素?