Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.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
将CSV数据保存到MySQL时使用PHP/fgetcsv时出现问题_Php_Mysql - Fatal编程技术网

将CSV数据保存到MySQL时使用PHP/fgetcsv时出现问题

将CSV数据保存到MySQL时使用PHP/fgetcsv时出现问题,php,mysql,Php,Mysql,实际上,我正在读取一个CSV文件,我尝试使用fgetcsv并使用fopen+fread作为套接字打开。问题是,当它将数据保存到MySQL时,所有数据都会显示,但行和空格会跳转 我还制作了一个MySQLi类来与DB对话 $c = 0; $arreglo = Array(); if (($file = fopen("/pth/to/file/DataParaCortesProgramados.csv", "r")) !== FA

实际上,我正在读取一个CSV文件,我尝试使用
fgetcsv
并使用
fopen
+
fread
作为套接字打开。问题是,当它将数据保存到MySQL时,所有数据都会显示,但行和空格会跳转

我还制作了一个MySQLi类来与DB对话

            $c = 0;
            $arreglo = Array();
            if (($file = fopen("/pth/to/file/DataParaCortesProgramados.csv", "r")) !== FALSE) {
                while (!feof($file)) {
                    $archivo = fread($file, 100000000);
                    $linea = explode("\n", $archivo);
                    $i = 0;
                    foreach ($linea as $campo) {
                        $camp = explode(",", $campo, 6);
                        if ($i > 2) {
                            $arreglo[$c]["UN"] = $camp[0];
                            $arreglo[$c]["ncliente"] = $camp[1];
                            $arreglo[$c]["cliente"] = $camp[2];
                            $arreglo[$c]["suscrip"] = $camp[3];
                            $arreglo[$c]["tiposervicio"] = $camp[4];
                            $arreglo[$c]["datoservicio"] = $camp[5];
                            $c++;
                        }
                        $i++;
                    }
                }
            }
            foreach ($arreglo as $row){
                $ObjDBLink->INSERT("INSERT INTO `SuscripBI_copy` (`UN`,
                                                `ncliente`,
                                                `cliente`,
                                                `suscrip`,
                                                `tiposervicio`,
                                                `datoservicio`) VALUES 
                                                ('" . $row["UN"] . "', 
                                                 '" . $row["ncliente"] . "',  
                                                 '" . $row["cliente"]. "',
                                                 '" . $row["suscrip"]. "',
                                                 '" . $row["tiposervicio"] . "',
                                                 '" . $row["datoservicio"]. "')");
            }
===========================================这是FGETCSV===========================

        if (($file = fopen("/path/to/file/" . trim($rowf), "r")) !== FALSE) {
            while (!feof($file)) {
                $reg = fgetcsv($file, 1000, ",");
                if ($rowc > 2) {
                    $clientes[$i]["UN"]=$reg[0];
                    $clientes[$i]["ncliente"]=$reg[1];
                    $clientes[$i]["cliente"]=$reg[2];
                    $clientes[$i]["suscrip"]=$reg[3];
                    $clientes[$i]["tiposervicio"]=$reg[4];
                    $clientes[$i]["datoservicio"]=$reg[5];
        //            var_dump($clientes);
                }
                $i++;
                $rowc++;
            }
        }

        foreach ($clientes as $cliente){
        //    var_dump($cliente);
            $ObjDBLink->INSERT("INSERT INTO `SuscripBI` (`UN`,
                                            `ncliente`,
                                            `cliente`,
                                            `suscrip`,
                                            `tiposervicio`,
                                            `datoservicio`) VALUES 
                                            ('" . trim($cliente["UN"]," \t\n\r\0\x0B") . "', 
                                             '" . trim($cliente["ncliente"]," \t\n\r\0\x0B") . "',  
                                             '" . trim($cliente["cliente"]," \t\n\r\0\x0B") . "',
                                             '" . trim($cliente["suscrip"]," \t\n\r\0\x0B") . "',
                                             '" . trim($cliente["tiposervicio"]," \t\n\r\0\x0B") . "',
                                             '" . trim($cliente["datoservicio"]," \t\n\r\0\x0B") . "')");
        }
这样,数据会保存到数据库中,但会使用空格或跳行保存 suvch如下所示:

|E m p l E a d o s | 1 3 7|

但我们需要:

|雇员| 1137|

在保存之前,我尝试过
修剪($row[“UN”],“\t\n\r\0\x0B”)
,或者使用
str\u replace
,但它总是以相同-不正确-的方式保存

================已解决==============

        if (($file = fopen("/path/to/file/" . trim($rowf), "r")) !== FALSE) {
            while (!feof($file)) {
                $reg = fgetcsv($file, 1000, ",");
                if ($rowc > 2) {
                    $clientes[$i]["UN"]=$reg[0];
                    $clientes[$i]["ncliente"]=$reg[1];
                    $clientes[$i]["cliente"]=$reg[2];
                    $clientes[$i]["suscrip"]=$reg[3];
                    $clientes[$i]["tiposervicio"]=$reg[4];
                    $clientes[$i]["datoservicio"]=$reg[5];
        //            var_dump($clientes);
                }
                $i++;
                $rowc++;
            }
        }

        foreach ($clientes as $cliente){
        //    var_dump($cliente);
            $ObjDBLink->INSERT("INSERT INTO `SuscripBI` (`UN`,
                                            `ncliente`,
                                            `cliente`,
                                            `suscrip`,
                                            `tiposervicio`,
                                            `datoservicio`) VALUES 
                                            ('" . trim($cliente["UN"]," \t\n\r\0\x0B") . "', 
                                             '" . trim($cliente["ncliente"]," \t\n\r\0\x0B") . "',  
                                             '" . trim($cliente["cliente"]," \t\n\r\0\x0B") . "',
                                             '" . trim($cliente["suscrip"]," \t\n\r\0\x0B") . "',
                                             '" . trim($cliente["tiposervicio"]," \t\n\r\0\x0B") . "',
                                             '" . trim($cliente["datoservicio"]," \t\n\r\0\x0B") . "')");
        }
问题是CSV文件的编码,是UTF-16LE,PHP读取UTF-8,为了解决这个问题,我使用shell命令将UTF-16LE改为UTF-8

iconv -f UTF-16LE -t UTF-8 $file  > $file2

你能展示CSV的那一行是什么样子的吗?请在插入和更新数据时使用准备好的语句如果它是CSV文件,为什么不使用而不是尝试滚动你自己的文件?请返回使用
fgetcsv
,你目前所做的不是读取CSV数据的正确方法,并且在许多情况下很容易失败。问题本身可能与保存CSV数据的字符编码有关,因此,请先找出哪一个字符。您好,谢谢您的回答,我使用fgetcsv,它的结果是一样的。你能展示CSV的那一行是什么样子吗?请在插入和更新数据时使用准备好的语句。如果它是CSV文件,为什么不使用而不是尝试滚动你自己的文件?请返回使用
fgetcsv
,你目前所做的不是读取CSV数据的正确方式,而且在许多情况下很容易失败。问题本身可能与保存CSV数据的字符编码有关,因此,请先找出哪一个是第一个。您好,所有人和thx对于您的答案,我使用fgetcsv,结果相同