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

Jul*_*Lam 2 php mysql security pdo mysql-real-escape-string

所以我很偏执并且使用mysql_real_escape_string()PDO.我实际上不在PDO中使用预处理语句,所以我必须清理输入.

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

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

我能做什么?

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

Pek*_*ica 16

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

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

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

一直使用PDO,别无选择.

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

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

但请注意,即使该函数的手册页也建议使用预准备语句.


dyn*_*mic 7

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

我建议你使用准备,让PDO做坏事.