我应该使用 PDO 来清理我的 Sql 查询还是“mysql_real_escape_string”就足够了? [复制]

Posted

技术标签:

【中文标题】我应该使用 PDO 来清理我的 Sql 查询还是“mysql_real_escape_string”就足够了? [复制]【英文标题】:Should I use PDO to sanitize my Sql queries or is "mysql_real_escape_string" enough? [duplicate] 【发布时间】:2011-05-06 10:36:02 【问题描述】:

我有一个简单的分类网站...

分类信息被插入到 mysql 表中,我用来清理用户输入的唯一东西是 mysql_real_escape_string

这就够了吗?

PDO 是最好的方式,但实际上只使用 mysql_real_escape_string 和 PDO 之间的区别是什么,让我们说这个查询:

   SELECT * FROM table_name WHERE table_name.classified = '$classified';

   INSERT INTO table_name (input1, input2) VALUES ('$input1', $input2);

谢谢

【问题讨论】:

转义太容易​​忘记了。参数化查询本质上是一种更安全的方法。 (但顺便说一句,你的例子似乎没有使用任何一种方法)。 PDO 的另一个优势是潜在的速度增益。目前这是理论上的,因为 PDO MySQL 驱动程序仍然求助于转义而不是绑定参数。 除非您真的需要数据库抽象,否则建议您既不使用 PDO,也不使用 MySql,而是使用 MySqli。它同时支持:binding 和 escaping 【参考方案1】:

我认为mysql_real_escape_string 足以存储在数据库中并抵御任何 sql 注入攻击。但其他验证是一个好主意,这样您的数据集就更规则,更不容易包含垃圾。

对于呈现任何此类数据,过滤(ala Drupal 风格等)也是一个好主意。

【讨论】:

以上是关于我应该使用 PDO 来清理我的 Sql 查询还是“mysql_real_escape_string”就足够了? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

使用 PDO 准备参数化查询

我的 PDO 查询对 SQL 注入安全吗?

PDO SQL 我正在尝试将我的 SQL 查询设置为检查多个列,但它不起作用 [重复]

我应该在 PDO 对象中返回啥来生成可靠的代码?

使用 PDO 驱动程序 PHP 在 sql-server 查询中循环

使用 PHP PDO 动态查询 Mysql 并在 Select 中使用 %