У меня эта очень раздражающая проблема уже пару дней, и я проводил исследования и все, но, похоже, это больше, чем мои навыки программирования и знания.
У меня есть ситуация, когда пользователь может определять пользовательские столбцы в таблицах в моей базе данных, а теперь мне нужно импортировать CSV
файлы в пользовательские таблицы пользователя. Поскольку я недавно узнал, что таблицы должны быть «динамическими», так это то, как я обрабатывал импорт до:
$file = $_FILES['file']['tmp_name']; $handle = fopen($file, "r"); $name = $_FILES['file']['name']; if (strrpos($name, '.csv', -4)) {//handling the csv file do { if ($data[0]) { $mysqli->query("INSERT INTO `test` (`name`, `surname`, `email`) VALUES ( '" . addslashes($data[0]) . "', '" . addslashes($data[1]) . "', '" . addslashes($data[2]) . "' ) "); } } while ($data = fgetcsv($handle, 1000, ",", "'"));
И это отлично работало с статическими таблицами. Но так как я не знаю, сколько будет таблицы столбцов, я попробовал что-то вроде этого:
Метод построения запроса
if (strrpos($name, '.csv', -4)) {//ubacije vrijednosti csv fajla u bazu do { if ($data[0]) { $query = "INSERT INTO $tabela ("; $last = end($anotherArray); foreach ($anotherArray as $something) {//$anotherArray contains names of fields in user's custom table if ($something != $last) { $query .= "" . $something . ","; } else { $query .= "" . $something . ")"; } } $query .= "VALUES ("; foreach($data as $val){ $query .= "'$val',"; } }while ($data = fgetcsv($handle, 1000, ",", "'")); $query=rtrim($query,','); $query.=")"; //var_dump($query); $rez=$mysqli->query($query); //var_dump($rez);
Но проблема с этим кодом заключается в том, что если файл csv содержит, например, 2 или более таких столбцов:
все становится частью этой части запроса VALUES
. Таким образом, запрос выглядит так: "INSERT INTO tabela12312334 (user_facebook_id,ime,prezime) VALUES('123123123','Ognjen','Babic','123123123','Neven',Babic)"
и, конечно же, количество полей isn ' t то же, что и количество значений.
Пожалуйста, помогите мне решить это, я в отчаянии.