【问题标题】:PHP import CSV containing single quotation marks [duplicate]PHP导入包含单引号的CSV [重复]
【发布时间】:2018-09-21 16:52:52
【问题描述】:

我正在尝试将包含单引号的 CSV 文件导入到文本中。每次,MySQL 都会给我一个错误。我怎样才能避免这种类型的错误?

这是导致问题的文本之一:

Sam Capra,CIA base à Londres 特工,échappe à l'explosion de son Bureau grâceà un appel de sa femme Lucy。 Mais cette dernière, enceinte, disparaît et Sam est tenu responsable de l'attentat par la CIA。

这是我的 SQL 查询:

 $sqlInsert = "INSERT into products_details (`product_title`,`product_price`, `product_image`, `product_gallery`,`product_description`, `meta_value`, `stock`, `weight`, `active`)
 values ('" . $column[2] . "','" . $column[21] . "','uploads/" . $column[0] . ".jpg','" . $column[1] . "','" . $column[22] . "','" . $json . "','" . (int)$column[15] . "','" . $column[20] . "','" . (int)$column[23] . "')";

提前感谢您的帮助!

【问题讨论】:

  • 您的代码容易受到SQL injection 攻击。您应该通过mysqliPDO 使用带有绑定参数的准备好的语句。 This post 有一些很好的例子。应用此技术将解决您所有的引用问题。
  • 你的CVS文件下载代码在哪里?您可以编写自己的函数来转义字符串中的引号。
  • 你已经在这里得到了一些不好的练习答案,所以不要转义字符串,不要用任何其他字符替换逗号等等。只需使用准备好的语句(按照第一条评论中的链接)
  • @AlexHowansky 是的,我在通过 mysqli 插入之前使用准备好的 :)
  • 使用准备好的语句是不够的。您需要使用带有绑定参数的准备好的语句。

标签: php mysql import-csv


【解决方案1】:

注意 tgat 你有单引号 inside 文本 你应该转义字符串

我假设 $column[22] 是包含您在示例中给出的文本的变量,假设 $conn 是您的 mysqli 对象 然后在插入字符串创建之前,应将此行添加到您的代码中

$column[22] = mysqli_real_escape_string($conn, $column[22]) ;

【讨论】:

  • 非常感谢!效果很好!
  • 不要使用这种技术,它已经过时并且对 SQL 注入提供的保护不足。
  • @AlexHowansky 好的,我明白了。在这种情况下,我会尝试查看其他内容:) 谢谢您的建议
猜你喜欢
  • 2014-12-17
  • 1970-01-01
  • 1970-01-01
  • 2021-02-08
  • 2014-04-04
  • 1970-01-01
  • 2017-07-21
  • 2016-03-18
  • 1970-01-01
相关资源
最近更新 更多