Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 这个csv到mysql上传有什么问题?_Php_Mysql_Csv_File Upload_Upload - Fatal编程技术网

Php 这个csv到mysql上传有什么问题?

Php 这个csv到mysql上传有什么问题?,php,mysql,csv,file-upload,upload,Php,Mysql,Csv,File Upload,Upload,我构建了这个脚本来上传.csv文件并直接将它们发送到我的数据库。 但它不会在我的桌子上写任何东西。 如果我把文件上传到我的服务器,然后写“file.csv”而不是“$file”,它就可以正常工作。。 但我想通过表单上传它们。 有人能帮我吗 表格: CSV导入 imp.php: <?php $delimiter = ','; $db = new mysqli('host', 'user', 'pw', 'db'); $file= $_FILES[file][temp_name];

我构建了这个脚本来上传.csv文件并直接将它们发送到我的数据库。 但它不会在我的桌子上写任何东西。 如果我把文件上传到我的服务器,然后写“file.csv”而不是“$file”,它就可以正常工作。。 但我想通过表单上传它们。 有人能帮我吗

表格:


CSV导入

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);
}


?>

我强烈建议使用
加载数据填充
语法,因为您的服务器上有一个结构良好的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可以直接从指定路径的文件系统读取文件(假设它具有权限)

这样就不需要打开文件并对其进行迭代


如果您不想这样做,我至少建议您进行批量插入并一次添加多行(而不是对每行进行一次插入查询)。

这是
$\u FILES['file']['tmp\u name']


ie not
temp\u name

您可以使用var\u dump($\u文件)吗?让我们看看。。。无法验证上载是否成功。无法验证数据库连接是否已建立。验证查询调用是否成功失败。正在使用
回送包含字符串的变量。。。我们要继续吗?上传成功!数据库连接正常!我刚做了一个编辑。。回显“$file”;不是程序的一部分。引用字符串失败。$\u FILES['file']['temp\u name']
不会更改任何内容。:/出现此错误:列计数与第1行的值计数不匹配,但我尝试在没有表单的情况下上载相同的值,结果成功。。不明白。。这怎么可能呢?你必须上传一个不同列数的文件!不我首先将mysql导出为CSV,然后尝试导入它。。。应为相同数量的串通或??)也许你的CSV创建得不完全正确?你真的做对了吗?也可能不是所有的行都有正确的列数?(即没有足够的逗号)phpMyAdmin将其导出为CSV。。你认为我能相信吗?
LOAD DATA LOCAL INFILE '/path/to/local/file'
INTO TABLE table
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'