首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在implode()中传递的参数无效

在implode()中传递的参数无效
EN

Stack Overflow用户
提问于 2014-06-10 00:53:23
回答 1查看 132关注 0票数 0

所以我有一个CSV文件,我想把它写成一个表。

在出现太多错误后,我放弃了导入GUI,并尝试通过一个php文件完成导入。

代码语言:javascript
复制
//create table with KNOWN values
mysql_query("CREATE TABLE uri_faculty
    (
        id INT NOT NULL AUTO_INCREMENT,
        PRIMARY KEY(id),
        id INT(15),
        lname VARCHAR(50),
        fname VARCHAR(50),
        mi VARCHAR(3),
        Spc_Title VARCHAR(50),
        title VARCHAR(50),
        deptid INT(5),
        dept VARCHAR(50),
        degree1 VARCHAR(10),
        earned1 INT(4),
        school1 VARCHAR(75),
        degree2 VARCHAR(10),
        earned2 INT(4),
        school2 VARCHAR(75),
        degree3 VARCHAR(10),
        earned3 INT(4),
        school3 VARCHAR(75),
        degree4 VARCHAR(10),
        earned4 INT(4),
        school4 VARCHAR(75),
        degree5 VARCHAR(10),
        earned5 INT(4),
        school5 VARCHAR(75),
        degree6 VARCHAR(10),
        earned6 INT(4),
        school6 VARCHAR(75)
        )");

//Get CSV file
$getfile = 'faculty_delim2.csv';
$csvfopen = fopen($getfile, "r");

//loop to fill csvget with arrays
for($i=0;!feof($csvfopen);$i++){
    $array = fgetcsv($csvfopen);
    $insert = implode("','", $array);

    //to exclude the first 2 lines (titles of document)
    if($i>=1){
        //values to be inserted into SQL are displayed
        //echo var_dump($array[$i])." <br> ";

        $sqlval = $insert;
        // var_dump($sqlval);

        //the while loop will constantly place values into the database until the file is finished
        mysql_query("INSERT INTO uri_faculty (id,lname,fname,mi,Spc_Title,title,deptid,dept,
                    degree1,earned1,school1,
                    degree2,earned2,school2,
                    degree3,earned3,school3,
                    degree4,earned4,school4,
                    degree5,earned5,school5,
                    degree6,earned6,school6,) VALUES ('$sqlval')
        ");
    }
}
fclose($csvfopen);
echo "complete";

?>

我一直收到一个错误,说implode接收了不正确的参数,但我找到的每一份文档都说我是正确的。

我更改了该文件的权限,它位于正确的位置。

EN

回答 1

Stack Overflow用户

发布于 2014-06-10 01:02:37

而不是这样:

代码语言:javascript
复制
for($i=0;!feof($csvfopen);$i++){
    $array = fgetcsv($csvfopen);

我会这样写:

代码语言:javascript
复制
while ($array = fgetcsv($csvfopen)) {

当没有更多的行要读取时,循环将自动结束。您的错误可能是一种边缘情况,在这种情况下,文件仍然认为它不在feof中,但尽管如此,仍然没有更多的行,并且fgetcsv返回false

顺便提一下,还有两个问题:

  1. 你很快就会遇到另一个错误:

。。。degree6,earned6,school6,)值。。。

不能在最后一列后面加逗号。改为这样写:

。。。degree6、earned6、school6)值。。SQL

  • 您对

注入问题敞开了大门。当您的某个CSV字段包含撇号时会发生什么?您应该学习如何将PDO与查询参数一起使用。如果失败,可以使用转义:

$insert = implode("','",array_map('mysql_real_escape_string',$array));

最后,您应该考虑跳过fgetcsv并使用LOAD DATA INFILE。然后你所有的CSV问题,以及逃逸的问题都会消失。

代码语言:javascript
复制
mysql_query("LOAD DATA LOCAL INFILE 'faculty_delim2.csv' INTO TABLE uri_faculty IGNORE 2 LINES");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24124988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档