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

Posted

技术标签:

【中文标题】将 mysql_real_escape_string 与 PDO 一起使用(不连接到 localhost 服务器)【英文标题】:Using mysql_real_escape_string with PDO (no connection to localhost server) 【发布时间】:2011-09-05 17:09:53 【问题描述】:

所以我相当偏执,将mysql_real_escape_string() 与PDO 一起使用。我实际上不在 PDO 中使用准备好的语句,所以我必须清理输入。

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

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

我能做什么?

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

【问题讨论】:

你为什么不想使用准备好的语句? 主要是懒惰。我习惯于将变量直接扔到 SQL 查询中(当然是在经过清理之后)。我意识到,准备它们不会那么难。 【参考方案1】:

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

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

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

一路使用PDO,别无选择。

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

返回一个带引号的字符串,理论上可以安全地传递给 SQL 语句。

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

【讨论】:

感谢您的警告。我想我应该学会以“正确”的方式去做,没有 PDO::quote,只是把它吸起来,然后学会准备我的陈述。干杯,佩卡!【参考方案2】:

使用 PDO 的好处是不用担心逃逸的东西。

我建议你使用 prepare 并让 PDO 完成这项肮脏的工作。

【讨论】:

以上是关于将 mysql_real_escape_string 与 PDO 一起使用(不连接到 localhost 服务器)的主要内容,如果未能解决你的问题,请参考以下文章

将自己的博客园,打造成个人知乎

如何将thinkcmf导入eclipse

如何将Ios文件上传到

Javascript 将正则表达式 \\n 替换为 \n,将 \\t 替换为 \t,将 \\r 替换为 \r 等等

如何将视频文件转换格式

sh 一个将生成CA的脚本,将CA导入到钥匙串中,然后它将创建一个证书并与CA签名,然后将其导入到