我知道如何将csv文件上传到mysql数据库,但只能通过cmd。我想知道如何使用PHP表格将csv文件上传到mysql数据库,并忽略excel上的一些信息,只会从某一行开始导入。 ?请帮助我。
答案 0 :(得分:6)
(PHP 4,PHP 5)
fgetcsv
参见php manual http://php.net/manual/en/function.fgetcsv.php
<?php
$row = 1;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
echo "<p> $num fields in line $row: <br /></p>\n";
$row++;
for ($c=0; $c < $num; $c++) {
echo $data[$c] . "<br />\n";
}
}
fclose($handle);
}
?>
答案 1 :(得分:2)
尝试此操作它运行良好,您可以根据CSV文件中的列数添加尽可能多的值。然后在HTML代码中将上传语法放在标记中。
**
$fname = $_FILES['csv_file']['name'];
$chk_ext = explode(".",$fname);
$filename = $_FILES['csv_file']['tmp_ name'];
$handle = fopen($filename, "r");
if(!$handle){
die ('Cannot open file for reading');
}
while (($data = fgetcsv($handle, 10000, ",")) !== FALSE)
{
$query = "INSERT INTO tablename (col1_csv, col2_csv)
values ('$data[0]', '$data[1]');
mysql_query($query) or die(mysql_error ());
}
fclose($handle);
?>
**
答案 2 :(得分:1)
您可以使用MySQL LOAD DATA INFILE
语句一次批量插入数千条记录。 PHP可以处理文件上传。 PHP代码类似于:
$query = sprintf("
LOAD DATA LOCAL INFILE '%s'
INTO TABLE `table1`
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\\r\\n'
IGNORE 1 LINES
",
mysql_real_escape_string($FILES["file1"]["tmp_name"])
);
LOCAL
关键字应该允许您解决某些安全限制。更改FIELDS TERMINATED BY
和LINES TERMINATED BY
参数以匹配excel在导出时使用的分隔符。 IGNORE 1 LINES
告诉MySQL跳过标题行。
注意:Excel似乎不使用转义字符;但它会(i)将包含,
和"
的字段与"
(ii)用""
括起来以转义单个"
内部数据。我相信MySQL会理解这种编码并正确导入数据。
答案 3 :(得分:0)
您可以将“LOAD DATA INFILE”语句与“IGNORE ... LINES”选项一起使用,您可以从命令行以及PHP中使用该选项。
答案 4 :(得分:0)
试试这个:
$filename=$_FILES["upload_file"]["name"];
$extension = end(explode(".",$filename));
if ($extension=='csv') {
$tmp_file=$_FILES["upload_file"]["tmp_name"];
$handle = @fopen($tmp_file, "r");
//specify your own database connection parameter
$db = new PDO('mysql:host=localhost;dbname=demo','user','password');
$stmt = $db->prepare("INSERT INTO writers (writer_name, writer_email) VALUES (?, ?)");
if ($handle) {
while (($buffer = fgets($handle, 4096)) !== false) {
$array=explode(",",$buffer);
$count=1;
foreach ($array as $value) {
$stmt->bindParam($count, $value);
$count++;
}
$stmt->execute();
}
if (!feof($handle)) {
echo "Error: unexpected fgets() fail\n";
}
fclose($handle);
}
$db = null;
echo "<p>Success</p>";
}
else {
$error="<p style='color:red;'>Invalid file type</p>";
}
请参阅http://pradipchitrakar.com.np/programming/upload-csv-mysql-php/