0

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

我面临的问题是

有时(在某些生产服务器上)当 POST 变量包含 ' 或

虽然 php 和 CI 有一个很好的工具来处理这些带有addlashesmysql_escape_sequence等的字符串

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

  2. 每次我们必须使用addslashes Ex: 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 开发人员如何使用此场景?你采取了哪些预防措施?

请推荐!!

4

1 回答 1

3

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

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

于 2014-04-08T16:27:04.653 回答