我很困惑,我读了几篇文章,但我仍然不确定。我不想去准备好的语句路由,因为这个站点只在我们的内部网上。我已经阅读了以下帖子,但我仍然不确定。
我的问题:我应该使用mysql-real-escape-string
SELECT * FROM ......
例如,在this post中,它指出:You need to call this function when building SQL queries with string literals. You should not call it anywhere else.
答案 0 :(得分:2)
我实际上是在使用它:
我将要添加到MySQL查询中的任何变量,如果它是直接用户输入(通过表单),或者是我的参数,则可以由用户修改已经通过GET requests
等传递了
你明白我的观点......: - )
答案 1 :(得分:2)
准备好的语句(以及其他内容)所做的是调用类似于mysql_real_escape_string()的方法
如果您不使用PDO,那么没关系,您必须了解您在做什么,并且您将获得相同的安全级别。
唯一且简单的规则是all raw data needs mysql_real_escape_string()
(或类似于其他语言)
例如:
- 来自用户输入的数据
- 您在数据库中存储RAW的数据(这是最好的方式),并且您正在使用新的sql语句
- 来自未知/其他来源的数据
分别是:
- 一定不要申请两次(以正确保存数据)
答案 2 :(得分:1)
当您不确定字符串中包含的内容时,这很重要。 这意味着用户输入。
您可能还想考虑使用PDO转移到预准备语句。
答案 3 :(得分:0)
您应该在SQL查询中插入的任何变量上使用它。
应该清理所有不是文字字符串的内容。如果从表单,数据库或其他任何东西中获取它并不重要,如果它不是常数,那么你应该清理它。
答案 4 :(得分:-2)
你问题中引用的句子是真的 所有其他答案都是错误的。
每次要在SQL查询中添加带引号的字符串时,都必须始终将其转义 这是你必须使用mysql_real_escape_string()的唯一情况。
PS。我无法相信这个问题仍然存在,而且还有所有答案。
Stackoverflow是一个非常奇怪的地方。