Нужна помощь в исправлении PHP кода, который импортирует данные из файлов CSV - PullRequest
0 голосов
/ 27 февраля 2020

У меня возникли проблемы с созданием функции импорта для базы данных MySQL, здесь приведен код:

<?php  
$connect = mysqli_connect("localhost", "root", "", "blhg");
if(isset($_POST["submit"]))
{
 if($_FILES['file']['name'])
 {
  $filename = explode(".", $_FILES['file']['name']);
  if($filename[1] == 'csv')
  {
   $handle = fopen($_FILES['file']['tmp_name'], "r");
   while($data = fgetcsv($handle))
   {
    $item1 = mysqli_real_escape_string($connect, $data[0]);  
    $item2 = mysqli_real_escape_string($connect, $data[1]);
    $item3 = mysqli_real_escape_string($connect, $data[2]);
    $item4 = mysqli_real_escape_string($connect, $data[3]);
    $item5 = mysqli_real_escape_string($connect, $data[4]);
    $item6 = mysqli_real_escape_string($connect, $data[5]);
    $item7 = mysqli_real_escape_string($connect, $data[6]);
    $item8 = mysqli_real_escape_string($connect, $data[7]);
    $item9 = mysqli_real_escape_string($connect, $data[8]);
    $item10 = mysqli_real_escape_string($connect, $data[8]);
    $query = "INSERT into blhg(Index, Location, Category, SubCategory, SourceMedia, Description, Publisher, Date, OriginStored, Hyperlink) values('$item1','$item2', '$item3', '$item4', '$item5', '$item6', '$item7', '$item8', '$item9', $item10')";
    mysqli_query($connect, $query);
   }
   fclose($handle);
   echo "<script>alert('Import done');</script>";
  }
 }
}

Проблема заключается в том, что при нажатии кнопки «Импорт» в файле примера ничего не отображается на самом деле происходит в базе данных mySQL, которая у меня есть.

Я пробовал много разных руководств, которые, кажется, работают безупречно при использовании их таблиц примеров, хотя, когда я изменяю его для использования своей таблицы, он перестает работать.

1 Ответ

0 голосов
/ 27 февраля 2020

Вы должны использовать подготовленные операторы при выполнении вставок в базу данных с неизвестными данными. В дополнение к тому, чтобы быть менее многословным, это более безопасно и немного быстрее. Я использовал PDO вместо mysqli, потому что он менее многословен и обеспечивает более современный интерфейс. Обработка ошибок - это упражнение, оставленное читателю.

<?php
// make sure the file is legitimate before processing it
// a file extension is provided by the client so is meaningless to check
if (!empty($_FILES["file"]) && is_uploaded_file($_FILES["file"]["tmp_name"])) {
    // create the database object
    $db = new \PDO("mysql:localhost;charset=utf8mb4;dbname=blhg", "root", "");
    // prepare the statement with placeholders for each item
    $stmt = $db->prepare("INSERT INTO blhg (Index, Location, Category, SubCategory, SourceMedia, Description, Publisher, Date, OriginStored, Hyperlink) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
    // open the file
    $h = fopen($_FILES["file"]["tmp_name"], "r");
    while($data = fgetcsv($h)) {
        // make sure there are enough fields
        if (count($data) === 10) {
            // execute the statement
            $stmt->execute($data);
        }
    }
    fclose($h);
}
...