【问题标题】:What is the Simple and Efficient way to handle single quotes and double quotes insertion issue using php and MySql [duplicate]使用php和MySql处理单引号和双引号插入问题的简单有效方法是什么[重复]
【发布时间】:2014-05-21 11:47:06
【问题描述】:

我主要使用 Php 5.4+ 和 MySql 5.5+ 版本。我正在为所有项目使用 Codeigniter

我面临的问题是

有时(在某些生产服务器上)有 POST 变量 包含 ' 或 " 引号,会发生数据库错误。但有几次(在 其他服务器)它们工作正常,我的意思是引用被插入 进入表格

虽然 php 和 CI 可以很好地使用 addslashesmysql_escape_sequence 等处理这些字符串

  1. 为用户发布的每个可能的变量检查这些条件并不容易

  2. 每次我们必须使用addslashes 例如:It\'s 并且在给出输出时我们必须再次应用stripslashes 来输出It's。但它是 难以处理大值。

  3. 由于数据库按原样保存数据,因此很难搜索这些字符串。

苦苦挣扎了好几天,我发现使用 utf8mb4_general_ci 优于 utf8

因此,我确保 CI 的 Database.php 具有以下内容

    $db['default']['char_set'] = 'utf8mb4';
    $db['default']['dbcollat'] = 'utf8mb4_unicode_ci';

我还将各个列的数据类型更改为“LONGTEXT”,并将其排序规则更改为“utf8mb4_general_ci

令我惊讶的是,它们适用于某些服务器。

但在某些服务器上我还是发现了同样的问题。这是位 即使我确保服务器配置匹配也令人沮丧 与那些工作的服务器。

所有 php 和 mysql 开发人员如何使用此场景?您采取了哪些预防措施?

请推荐!!

【问题讨论】:

  • 如果您遇到这个问题,那么您没有使用准备好的语句!你应该立即解决这个问题。
  • “虽然 php 和 CI 有很好的工具来处理这些字符串,比如 addlashes 和 mysql_escape_sequence 等”——这些工具并不好;它们分别是“糟糕的”和“糟糕的和过时的”。
  • 阅读How can I Use Prepared Statements in CodeIgniter。它不完全是您问题的重复,但答案也是您问题的答案。此外,请考虑切换到支持带参数的实际准备查询的不同框架。

标签: php mysql codeigniter addslashes utf8mb4


【解决方案1】:

在我的旧项目中,我只有一个函数 DB::esc(),它包装了我正在使用的库中的任何转义函数,无论是 mysql_real_escape_string 还是其他任何东西。

在我的新项目中,我使用准备好的语句并让扩展来处理它。

【讨论】:

  • +1 只是为了澄清,...“使用准备好的语句”与绑定变量。 (只是指出这是 SQL 文本中的更改,并通过绑定变量引用而不是将它们包含在 SQL 文本中来提供值。也就是说,可以使用准备好的语句,但仍然在 SQL 文本中包含值,并且同样的问题仍然存在。)
猜你喜欢
  • 2017-03-08
  • 2018-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
相关资源
最近更新 更多