因此,使用PHP和Wordpress将CSV加载到SQL数据库时遇到问题。两者都在本地xammp atm上运行。
这是我用于加载CSV文件的代码。它首先通过html表单将其上传到某个临时文件夹(数据),然后尝试使用LOAD DATA
将内容复制到表(wp_data
)
<?php
if (isset($_POST['submit'])) {
global $wordpress,$wpdb;
$file = $_FILES['fileToUpload']['tmp_name'];
$target_dir = $_SERVER['DOCUMENT_ROOT']."/data";
$target_file = $target_dir . '/' . basename($_FILES["fileToUpload"]["name"]);
move_uploaded_file($file, $target_file);
$sql="
LOAD DATA INFILE '$target_file' INTO TABLE wp_data FIELDS TERMINATED BY ';' IGNORE 1 ROWS";
$query = $wpdb->query($sql);
}
?>
上载部分工作正常,但是当尝试用数据填充表时,它仅填充“ 0s” / NULL值,例如 this :
文件为文本格式,如下所示:此:
从视觉上看,它看起来像是此:
SHOW CREATE TABLE wp_data
中的表结构:
CREATE TABLE `wp_data` (
`Unix_time` int(11) NOT NULL,
`Message` text NOT NULL,
`Time` float NOT NULL,
`DF` int(11) NOT NULL,
`Type_code/BDS_number` int(11) NOT NULL,
`Latitude` double NOT NULL,
`Longitude` double NOT NULL,
`Altitude` int(11) NOT NULL,
`Ground_speed` double NOT NULL,
`Baro_diff` int(11) NOT NULL,
`Heading` int(11) NOT NULL,
`TAS` int(11) NOT NULL,
`Mach` float NOT NULL,
`FOM_SOURCE` varchar(40) DEFAULT NULL,
`Wind_speed` varchar(40) DEFAULT NULL,
`Wind_direction` varchar(40) DEFAULT NULL,
`Temperture` text,
`Pressure` varchar(40) DEFAULT NULL,
`Turbulence` varchar(40) DEFAULT NULL,
`Humidity` varchar(40) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
我在这里做错了什么?我在PHP上还很陌生,因此陷入了困境 :(...
谢谢。
答案 0 :(得分:1)
通过将查询中的编码设置为CHARACTER SET UTF8
来解决此问题,如下所示:
LOAD DATA INFILE '$target_file'
INTO TABLE wp_data
CHARACTER SET UTF8
FIELDS TERMINATED BY ';'
IGNORE 1 ROWS;