PHP - Вставка нескольких строк из нескольких файлов CSV с согласованными столбцами в mysql - PullRequest
0 голосов
/ 20 июня 2020

Несколько файлов CSV имеют согласованные 26 заголовков столбцов. Я использую простой PHP для вставки данных в MySQL. Данные могут содержать> 100 тыс. Строк.

Вот мой образец CSV-файла.

Вот мой csv файл

Ниже приведен мой код:

while(($line = fgetcsv($csvFile)) !== FALSE){
    //to get the data from csv
    $account_code = $line[0];
    $caller_number = $line[1];
    $callee_number = $line[2];
  .
  .
  .

    $action_type=$line[23];
    $source_trunk_name=$line[24];
    $dest_trunk_name =$line[25];

    $query = $db->query("INSERT INTO `cdrnew`
                (`account_code`, `caller_number`, `callee_number`, ...........,`action_type`, `source_trunk_name`, `dest_trunk_name`)
            VALUES ('".$account_code."','".$caller_number."', '".$callee_number."', ............,'".$action_type."','".$source_trunk_name."','".$dest_trunk_name."')");

Это правильный подход для вставки данных из CSV в MySQL, если у меня есть согласованные заголовки 26 столбцов во всех файлах CSV . Или есть лучший подход?

1 Ответ

0 голосов
/ 20 июня 2020

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

Сначала переместите запрос за пределы l oop и подготовьте его там

$stmt = $db->prepare("INSERT INTO `cdrnew`
                (`account_code`, `caller_number`, `callee_number`, 
                .,.,.,.,.,.,
                `action_type`, `source_trunk_name`, `dest_trunk_name`)
            VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

while(($line = fgetcsv($csvFile)) !== FALSE){

    $stmt->bind_param('ssssssssssssssssssssssssss',
                        $line[0], $line[1], $line[2], $line[3], $line[4],
                        $line[5], $line[6], $line[7], $line[8], $line[9],
                        $line[10], $line[11], $line[12], $line[13], $line[14],
                        $line[15], $line[16], $line[17], $line[18], $line[19],
                        $line[20], $line[21], $line[22], $line[23], $line[24],
                        $line[25]
        );
    $stmt->execute();
}

ПРИМЕЧАНИЕ: вы можете добавить некоторую проверку ошибок в этот базовый макет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...