我需要从CSV文件中提取数据并将其插入MySQL数据库。
(见下面的示例文件)
到目前为止,我有一个包含整个文件的数组(用PHP读取文件):
Array ([0] => 01 [1] => 12345678X [2] => Title [3] => 120.00
......等等。
如何修改数组以为每个项目创建四个组?每个项目都是自己的数组?
例如:
array( array (01,ISBN,Name,Price),
array (01,ISBN,Name,Price)
);
此外,如何单独访问这些值并插入MySQL?
例:
$price = 1.25;
< - 在数组
这是我到目前为止所做的:
$fp = @fopen($_FILES['filename']['tmp_name'], "r");
if ($fp) {
$arr = array();
while(!feof($fp)) {
$this_line = fgets($fp);
$line = explode("^",$this_line);
if($line[0] != "") {
array_push($arr,$line[0]);
}
$i++;
}
上面的代码返回一个大数组,每列都是一个元素。我希望在一个大型数组中每个数组包含四个元素的数组,以便我可以单独访问每个“行”。
示例文件:
ID 01
Title This is the title
Price 120.00
ISBN xxxxxx
^
ID 02
Title This is the title
Price 20.00
ISBN xxxxxx
^
答案 0 :(得分:3)
使用fgetcsv,避免CSV解析问题。
它会以数组的形式逐行返回文件,这就是你要求的。
然后你可以使用MySQLi的prepared statement with bound parameters来插入行。
[编辑] 类似这样的事情:
$file = fopen('data.csv', 'r');
$stmt = $connection->prepare("INSERT blah blah blah VALUES(?, ?, ?)");
while (($row = fgetcsv($file, 1000, "\t")) !== FALSE) {
$stmt->bind_param('types string', $row[0], $row[1], etcetera);
$stmt->execute();
}