【发布时间】:2014-05-21 11:47:06
【问题描述】:
我主要使用 Php 5.4+ 和 MySql 5.5+ 版本。我正在为所有项目使用 Codeigniter。
我面临的问题是
有时(在某些生产服务器上)有 POST 变量 包含 ' 或 " 引号,会发生数据库错误。但有几次(在 其他服务器)它们工作正常,我的意思是引用被插入 进入表格
虽然 php 和 CI 可以很好地使用 addslashes 和 mysql_escape_sequence 等处理这些字符串
为用户发布的每个可能的变量检查这些条件并不容易
每次我们必须使用addslashes 例如:It\'s 并且在给出输出时我们必须再次应用stripslashes 来输出It's。但它是 难以处理大值。
由于数据库按原样保存数据,因此很难搜索这些字符串。
苦苦挣扎了好几天,我发现使用 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