0

我将数据作为批量上传插入表中, $handle = fopen($_FILES['file_clg']['tmp_name'], "r");

        fgetcsv($handle);

        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {

        $collegename = trim(str_replace(array("’","'"),"'",$data[0]));

        $description = trim(str_replace(array("’","'"),"'",$data[1]));

        $sql1 = $db->selectquery("insert into $tbl(name,details)values('" .$collegename."','" .$description."')");

        }

        fclose($handle);

这里只提到了两个字段:我的 bulkupload csv 中超过 25 列

问题是 csv 分隔符是逗号(','),但在某些情况下,“详细信息”字段内容包括逗号,因为在这种情况下记录未正确插入。

这个案子怎么解决???

还有插入部分的问题,

学院名称:阿尔瓦工程技术学院(AIET)

并将其保存在表格中,格式如下:

阿尔瓦工程技术学院 (AIET)

我尝试下面的代码:

          $collegename = htmlentities(iconv("cp1252", "utf-8", trim(str_replace(array("’","'"),"'",$data[0]))), ENT_IGNORE, "UTF-8");

但它不起作用,我怎样才能用单引号解决这个问题

我放置了: header("Content-Type: text/html; charset=ISO-8859-1");

进入标题部分..

4

1 回答 1

0

我需要查看一些样本才能自信地说出任何事情,但是有规范用逗号引用值以保留值计数。 https://stackoverflow.com/a/769675/2943403

或者,您可以创建一个新的fputcsv()代码块,该代码块将生成一个以分号(或其他非冲突字符)分隔的 csv 文件。我没有为此提供实际的代码段。SO上有很多可用的资源,包括:

然后你的 while 循环可以使用;(或其他)作为分隔符。

至于安全地将您的值(可能有单引号)放入查询中,请使用准备好的语句

// I realize your query will be much larger than the sample...
// declare $collegename and $decription values
$stmt=$db->prepare("INSERT INTO `$tbl` (`name`,`details`) VALUES (?,?)");
$stmt->bind_param("ss", $collegename,$description);
if($stmt->execute()){
    echo "success";
}else{
    echo "Error: ",$db->error;
}
于 2017-04-10T12:25:05.963 回答