我想知道我是否可以在没有首先创建一个对象实例来应用函数的情况下转义字符串(使用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的情况下手动转义字符串的函数。
答案 0 :(得分:7)
简短的回答是:否。
答案很长:嗯,不推荐,原因很简单--MicSQLi的真正转义考虑了字符编码,因为某种SQL注入技术使用和滥用字符编码来绕过常见的过滤器。这要求代码知道原始(PHP)字符集和接收(MySQL)字符集配置。这就是为什么它不能被静态调用(并且在你有一个到服务器的有效链接之前不能被调用)!
我也避免使用它的程序版本,因为它只是通过有效地使用你连接到的最后一个服务器来完成“charset”位,这可以在你处理时带来有趣的东西同时具有多个数据库连接。
答案 1 :(得分:1)
mysql_real_escape_string()可能对您有所帮助,但您必须在两个版本中建立连接。原因是应用程序不知道如何转义数据库的字符串。当连接到数据库时,该函数会询问数据库如何转义以及如何转义。