MySQL - 当我必须转义变量而不是时?

时间:2011-06-26 23:30:07

标签: mysqli

我想知道是否有必要逃避内部变量,这些内部变量来自数据库本身并且是用户输入的。这只是浪费性能还是更安全?

谢谢!

2 个答案:

答案 0 :(得分:1)

您必须转义所有用户输入,甚至包括服务器变量等内容。如果从数据库中提取值而不是通过用户输入以任何方式触及该值,则在查询中重用时不需要对其进行转义,除非它包含在通过字符串连接传入时会破坏​​该查询的字符。

例如,我将数据库中的名称O'Brien拉入PHP变量$name,然后在另一个语句中尝试将其重新放入,如下所示:

$query = "INSERT INTO table (id, name) VALUES (123, '$name');";

这将打破查询,因为我无法逃脱O'Brien中的'

答案 1 :(得分:1)

您无需担心这一点。如果数据库中的值具有任何保留的名称,则无关紧要,因为它不会被解释。

您应该担心sql注入并确保您运行的任何语句插入,删除,选择或更新来自用户输入的数据都会转义单引号和其他字符。即使是普通用户 - 没有任何不良意图 - 会使用单引号也会产生错误。

如果用户使用的用户名如下:

joe'; drop table users; --

你可能遇到麻烦了。

希望这有帮助!