我构建了这个脚本来上传.csv文件并直接将它们发送到我的数据库。 但它没有在我的表格中写任何东西。 如果我将文件上传到我的服务器并写“file.csv”而不是“$ file”它完美地工作.. 但我想通过表单上传它们。 任何人都可以帮助我吗?
形式:
<html>
<head>
</head>
<body>
<h2> CSV Import </h2>
<form>
<form method="post" action="imp.php" enctype="multipart/form-data">
<input type="file" name="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>
imp.php:
<?php
$delimiter = ',';
$db = new mysqli('host', 'user', 'pw', 'db');
$file= $_FILES[file][temp_name];
if (($handle = fopen($file, 'r')) !== FALSE) {
while (($data = fgetcsv($handle, 1000, $delimiter)) !== FALSE) {
foreach($data as $i => $content) {
$data[$i] = $db->real_escape_string($content);
}
$db->query("INSERT INTO table VALUES('" . implode("','", $data) . "');");
}
fclose($handle);
}
?>
答案 0 :(得分:0)
我强烈建议使用LOAD DATA INFILE
语法,因为您的服务器上有一个结构良好的CSV。
类似的东西:
LOAD DATA LOCAL INFILE '/path/to/local/file'
INTO TABLE table
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
这将允许您使用单个查询上传所有内容。另请注意,如果您的MySQL服务器和应用程序服务器位于同一台计算机上,您可以省略LOCAL
选项,因为MySQL可以在指定的路径上直接从文件系统读取文件(假设它具有权限)
这消除了打开文件并迭代它的需要。
如果您不想使用此路由,我至少建议您一次执行批量插入并添加多行(而不是每行都有一个插入查询)。
答案 1 :(得分:0)
这是$_FILES['file']['tmp_name']
请参阅http://www.php.net/manual/en/features.file-upload.post-method.php
即不是temp_name