【发布时间】:2019-04-02 15:52:42
【问题描述】:
我有一个包含 n 条记录的 csv 文件。现在我想将它导入到表中。我还想忽略重复的记录(如果特定的两列具有相同的值,则考虑重复)。我还将标题传递给查询值,以便将 reoced 插入到数据库表的适当列中
我的查询是 $header 是 csv 标头 $basePath 是 csv 的基本路径位置
$query = sprintf("LOAD DATA local INFILE '%s' INTO TABLE table name FIELDS TERMINATED BY '`' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\"' LINES TERMINATED BY '\\n' (duplicatematchcol1,duplicatematchcol1) IGNORE 0 LINES (" . implode(',', $header) . ") , addslashes($basePath));
【问题讨论】:
-
警告:使用
mysqli时,您应该使用parameterized queries 和bind_param将用户数据添加到您的查询中。 请勿使用字符串插值或连接来完成此操作,因为您创建了严重的SQL injection bug。 切勿将$_POST、$_GET或任何用户数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。addslashes不是 SQL 转义方法。 -
@tadman 我在 laravel 中使用它。
-
Laravel 有一个 number of methods for safely introducing data using placeholder values。尽可能使用这种方法,并避免使用像
sprintf这样的快速黑客攻击,它们不足以防止注入问题。 -
@tadman。我一定会在查询中使用您的输入。但是你能帮我实现mysql查询的输出吗
-
可能是重复的:stackoverflow.com/q/12891337/1531971(如果不是,请显示并告诉我们为什么不。)