我应该使用 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 SQL 我正在尝试将我的 SQL 查询设置为检查多个列,但它不起作用 [重复]