问题描述
我在将多个文件的csv数据加载到mysql时遇到问题。 通过phpmyadmin导入csv分隔符(一次输入一个)时,数据正确显示为带有十进制值。
但是,在导入csv文件中的值时,所有列均包含0.00。
这是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,`colum3` decimal(6,`colum4` decimal(5,`colum5` decimal(6,`colum6` decimal(6,`colum7` decimal(5,`colum8` decimal(6,`colum9` decimal(6,`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本身导入的确切结构相同。 我在这里忘记了什么。
解决方法
您的代码不完整!但是我稍作改动,将其写在自己的身边,并且工作正常。在第一步中,您将组名用于板条箱表,但将其插入另一个表中。为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,`colum3` decimal(6,`colum4` decimal(5,`colum5` decimal(6,`colum6` decimal(6,`colum7` decimal(5,`colum8` decimal(6,`colum9` decimal(6,`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>