Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/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文件和数据库_Php_Mysql_Csv - Fatal编程技术网

Php CSV文件和数据库

Php CSV文件和数据库,php,mysql,csv,Php,Mysql,Csv,以下是我的CSV文件示例: Name | USD ------------ Ifone | 500 Ufone | 600 然后(如何)在创建的表中存储从第二行开始的元素,依此类推。请让我知道什么是一个适当的方式来做到这一点 谢谢 我使用以下函数从csv文件中获取数据: $row = 1; if (($handle = fopen("mycsv.csv", "r")) !== FALSE) { while (($data = fgetcsv($handle, 1000, ",")) !

以下是我的CSV文件示例:

Name | USD ------------ Ifone | 500 Ufone | 600 然后(如何)在创建的表中存储从第二行开始的元素,依此类推。请让我知道什么是一个适当的方式来做到这一点

谢谢

我使用以下函数从csv文件中获取数据:

$row = 1;
if (($handle = fopen("mycsv.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);
}
$row=1;
if($handle=fopen(“mycsv.csv”,“r”)!==FALSE){
while(($data=fgetcsv($handle,1000,“,”)!==FALSE){
$num=计数($data);
echo“$num字段位于第$row行:

\n”; $row++; 对于($c=0;$c<$num;$c++){ echo$data[$c]。“
\n”; } } fclose($handle); }
更好的方法是:

1) 研究CSV表格格式,确定字段名称和类型,例如

fonemodel varchar(50);
cost      integer;      -- or a monetary field
2) 从上面的字段手动创建表

CREATE TABLE fones ...
3) 直接导入文件:

LOAD DATA LOCAL INFILE '/path/to/mycsv.csv'
INTO TABLE fones
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
终端和机柜取决于CSV结构(您提供的示例实际上是管道分隔的)

一旦存储了这两个表,就可以在适当的数据类型之间运行比较(
varchar
可能会给您带来麻烦-599可能被认为小于60,因为字符“5”位于“6”之前)

更新 假设真正的CSV是

 UFone,500,useless data,1234,other useless info,blah blah
您只需要型号、成本和库存,即第1列、第2列和第4列。然后将输入指定为:

 ...INTO TABLE fones (model, cost, @ignore, stock, @ignore, @ignore)...
而不是简单地将
放入表中


有关的详细信息。

是否有问题?遇到错误或问题?不要自动创建表。永远不要导入不知道其格式的数据。一旦你意识到这一点,mysql就可以直接导入csv数据:这个问题有用吗@MarcB实际上,我真正的任务是根据asc顺序中的最低成本比较两个csv文件,因此我认为最好将csv文件存储到我的数据库中,并通过sql查询过滤结果。否。将数据放入真实数据库是最好的方法,即使只是短期的。csv文件使用“任意”方法(如筛选/查询)效率极低。好的,当前解决方案正在转储所有行,现在最后一个问题是,假设.csv文件中有6个列,我只想转储数据库表中的三个相应列,在这种情况下,我该如何做?
 ...INTO TABLE fones (model, cost, @ignore, stock, @ignore, @ignore)...