【问题标题】:MySQL Query Quotes and such [duplicate]MySQL查询报价等[重复]
【发布时间】:2012-12-11 05:51:42
【问题描述】:

可能重复:
MySQL - when to use single quotes, double quotes, and backticks?

问题 1

为什么会这样?

"SELECT `id` FROM `table` WHERE x= '".$y."'"

但不是这个?

"SELECT `id` FROM `table` WHERE 'x' = '".$y."'"
                                ^ ^
                              Notice the extra single quotes

问题 2 id 是否比 `id` 更好(带有奇怪的引号)? 还是因为双引号将其解释为变量?

【问题讨论】:

  • 真正需要的是一些proper SQL escaping。您应该从不直接在查询中插入用户数据。使用占位符,否则可能会产生严重后果。
  • 感谢您的建议 :)

标签: php mysql sql select


【解决方案1】:

因为服务器将x 读取为一个值,因为它是用single quote 包装的。 backtick 转义查询中使用的保留关键字,通常用于包裹 columnNamestableNames

在您的查询中,

SELECT `id` FROM `table` WHERE 'x' = '$y'

x不是一列,而是一个字符串值。

对于问题 2,您可以消除 id 周围的那些反引号,因为它不是 Reserved Keyword,这是 MySQL 中保留关键字的完整列表

作为旁注,查询容易受到SQL Injection 的影响。请看下面的文章,了解如何预防。通过使用 PreparedStatements,您可以摆脱在值周围使用单引号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多