【问题标题】:Using MySQLi's real_escape_string as a static function使用 MySQLi 的 real_escape_string 作为静态函数
【发布时间】:2012-11-17 22:05:16
【问题描述】:

我想知道是否可以在不首先创建对象实例来应用函数的情况下转义字符串(使用 real_escape_string)?

也就是说,我们可以这样做:

$database = new mysqli(DB_HOST,DB_USER,DB_PASS,DB_NAME);
$database->real_escape_string($query);
$database->query($query)

等等

但是,为了在我的应用程序中保持一致性,我试图做的是拥有一个主要是静态的数据库类,它是 MySQLi 类的扩展,以便我可以调用:database::real_escape_string($query),一个静态方法。

我确实意识到我可以构建一个无需 MySQL 手动转义字符串的函数。

【问题讨论】:

    标签: php mysqli static-methods


    【解决方案1】:

    简短的回答是:不。

    长答案是:嗯,不推荐,原因很简单——MySQLi 的真正转义考虑了字符编码,因为某种 SQL 注入技术使用和滥用字符编码来绕过常见的过滤器。这要求代码知道原始 (PHP) 字符集和接收 (MySQL) 字符集配置。这就是为什么它不能被静态调用(并且在你有一个到服务器的有效链接之前不能被调用)!

    我也会避免它的程序版本,因为它只是通过有效地占用您连接的最后一个服务器来完成“字符集”位,一旦您进行交易,这可能会带来有趣的东西同时具有多个数据库连接。

    【讨论】:

      【解决方案2】:

      mysql_real_escape_string() 可能会对您有所帮助,但您必须在两个版本中建立连接。原因是应用程序不知道如何为数据库转义字符串。当连接到数据库时,该函数会询问数据库如何转义以及转义什么。

      【讨论】:

      • 该函数在 PHP 5.5 中被弃用并在 PHP 7 中被删除。
      猜你喜欢
      • 2011-08-16
      • 2015-09-13
      • 1970-01-01
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      • 2016-02-16
      • 2011-03-06
      • 2016-06-21
      相关资源
      最近更新 更多