所以我很偏执,并且在PDO中使用mysql_real_escape_string()
。我实际上并没有在PDO中使用预处理语句,因此我必须对输入进行清理。
在我自己的服务器上托管时,我会在本地计算机上创建一个非特权用户,这样mysql_real_escape_string()
就不会失败并清空我的变量(呵呵,现在那是清理!) 。我意识到这是一个非常失败的解决方案,因为如果数据库没有匹配的字符集,那么根本没有消毒点,但它适用于过渡期。
现在在我的新主机上,我无法为数据库创建一个unpassworded,nonrivileged用户......并且mysql_real_escape_string()
失败,因为本地计算机上没有mysql服务器。我无法编辑php.ini来设置默认数据库的主机名/用户/传递。
我该怎么办?
在我写这篇文章时头脑风暴,我想知道php是否允许运行时更改配置...也许...... hrm。
修改:嗯... ini_set()
? :o
答案 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做坏事。