将mysql_real_escape_string与PDO一起使用(不与localhost服务器连接)

时间:2011-05-31 18:22:52

标签: php mysql security pdo mysql-real-escape-string

所以我很偏执,并且在PDO中使用mysql_real_escape_string()。我实际上并没有在PDO中使用预处理语句,因此我必须对输入进行清理。

在我自己的服务器上托管时,我会在本地计算机上创建一个非特权用户,这样mysql_real_escape_string()就不会失败并清空我的变量(呵呵,现在那是清理!) 。我意识到这是一个非常失败的解决方案,因为如果数据库没有匹配的字符集,那么根本没有消毒点,但它适用于过渡期。

现在在我的新主机上,我无法为数据库创建一个unpassworded,nonrivileged用户......并且mysql_real_escape_string()失败,因为本地计算机上没有mysql服务器。我无法编辑php.ini来设置默认数据库的主机名/用户/传递。

我该怎么办?

在我写这篇文章时头脑风暴,我想知道php是否允许运行时更改配置...也许...... hrm。 修改:嗯... ini_set()? :o

2 个答案:

答案 0 :(得分:16)

混合两个这样的数据库库是一个坏主意,可能不安全。

mysql_real_escape_string()需要一个现有的,经典的mysql_connect()数据库连接(它可以从中获取字符集信息)是完全安全的。 PDO连接将是独立的,可能具有不同的字符集设置,最终导致less security

  

在使用mysql_real_escape_string()之前需要MySQL连接,否则会生成级别为E_WARNING的错误,并返回FALSE。如果未定义link_identifier,则使用最后一个MySQL连接。

一直使用PDO,别无选择。

如果您不想使用预准备语句,PDO::quote应该是正确的功能:

  

返回一个引用的字符串,理论上可以安全地传入SQL语句。

但请注意,即使该功能的手册页也建议使用预准备语句。

答案 1 :(得分:7)

使用PDO的用处是不要担心逃避的东西。

我建议你使用prepare,让PDO做坏事。