MySQL загружает данные в файл, импортирует нули с десятичными данными с помощью php

У меня возникла проблема с загрузкой данных csv из нескольких файлов в mysql. При импорте CSV отдельно (по одному) через phpmyadmin данные отображаются правильно с десятичными значениями.

Но при импорте все столбцы содержат 0,00 в случае значений из файла csv.

Это PHP, который я использую:

// to create the headers
foreach($csvtable as $file){
    
    $table = basename($file, '.csv'); 

    mysqli_query($conn, "
    CREATE TABLE IF NOT EXISTS ".$csvtable."(
    `colum1` decimal(6,2),
    `colum2` decimal(6,2),
    `colum3` decimal(6,2),
    `colum4` decimal(5,2),
    `colum5` decimal(6,2),
    `colum6` decimal(6,2),
    `colum7` decimal(5,2),
    `colum8` decimal(6,2),
    `colum9` decimal(6,2),
    `colum10` decimal(5,2) 
    )
    ");
// Code to load the data from the files in the tables and ignore the header

mysqli_query($conn, "
    LOAD DATA INFILE '".$file."' INTO TABLE ".$table."
    FIELDS TERMINATED BY ';'
    IGNORE 1 LINES
    ");

В CSV-файле следующее:

column1;column2;column3;column4;column5;column6;column7;column8;column9;column10
4.50;1.67;0.00;0.00;0.83;0.00;0.00;0.83;0.00;0.00
9.00;3.33;0.00;0.00;1.75;0.00;0.00;1.75;0.00;0.00
13.50;5.00;0.00;0.00;2.58;0.00;0.00;2.58;0.00;0.00
18.00;6.67;0.00;0.00;3.50;0.00;0.00;3.50;0.00;0.00
22.50;8.33;0.00;0.00;4.33;0.00;0.00;4.33;0.00;0.00
27.00;10.08;0.00;0.00;5.25;0.00;0.00;5.25;0.00;0.00
31.50;11.75;0.00;0.00;6.08;0.00;0.00;6.08;0.00;0.00
36.00;13.42;0.00;0.00;7.00;0.00;0.00;7.00;0.00;0.00
40.50;15.08;0.00;0.00;7.83;0.00;0.00;7.83;0.00;0.00
45.00;16.75;0.00;0.00;8.75;0.00;0.00;8.75;0.00;0.00
49.50;18.42;0.00;0.00;9.58;0.00;0.00;9.58;0.00;0.00

Но загружает как:

0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00
0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00
0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00
0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00
0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00
0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00
0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00
0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00
0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00
0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00
0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00

Таблицы сделаны с точной структурой, как будто я импортирую ее самим phpmyadmin. Что я здесь забываю.


person whezzle89    schedule 08.09.2020    source источник


Ответы (1)


Ваш код не полный! Но я немного меняю и пишу это в мою сторону и работало правильно. На первом шаге вы использовали имя группы для таблицы ящиков, но вставили его в другую таблицу. Используйте одно и то же имя для create table и inset into.

<!DOCTYPE html>
<html>
<body>

<?php

$con=mysqli_connect("localhost","user","pass","test");

echo '<br/>';


    $file = "D:\\a.csv";
    
    $table = basename($file, '.csv');
    
    echo '----------'.$table.'</br>';
    
    mysqli_query($con, "
    CREATE TABLE IF NOT EXISTS ".$table."(
    `colum1` decimal(6,2),
    `colum2` decimal(6,2),
    `colum3` decimal(6,2),
    `colum4` decimal(5,2),
    `colum5` decimal(6,2),
    `colum6` decimal(6,2),
    `colum7` decimal(5,2),
    `colum8` decimal(6,2),
    `colum9` decimal(6,2),
    `colum10` decimal(5,2)
    )
    ");
    // Code to load the data from the files in the tables and ignore the header
    
    mysqli_query($con, "
    LOAD DATA INFILE '".$file."' INTO TABLE ".$table."
    FIELDS TERMINATED BY ';'
    IGNORE 1 LINES
    ");
?>

</body>
</html>
person Majid Hajibaba    schedule 08.09.2020
comment
хаджибаба, я минимизировал свой код. Я забыл упомянуть, что когда я меняю десятичное число на varchar, у меня нет проблем с импортом в правильную таблицу. Следующая проблема — отсортировать таблицу по номеру. У меня нет проблемы сортировки, когда столбцы установлены в десятичное число. - person whezzle89; 08.09.2020
comment
использовать десятичное число хорошо, и нет необходимости менять его на varchar. Используйте десятичную дробь и порядок, чтобы сделать желаемое. - person Majid Hajibaba; 08.09.2020
comment
Я не изменил его на varchar, но протестировал его перед установкой десятичного числа с типом varchar. Импорт нескольких файлов проходит корректно. Каждый файл должен создавать свою собственную таблицу. - person whezzle89; 09.09.2020