简单的mysql选择错误限制

时间:2013-01-12 00:53:10

标签: php mysql sql

这是错误消息和我的代码。我只是没有看到错误。

描述:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'key='cbd1f3bb822e8617b624301774287490d3fcd97e' LIMIT 1' at line 1

查询:

SELECT * 
FROM wp_wpsc_api_keys 
WHERE name='MichelleAllen17' 
AND key='cbd1f3bb822e8617b624301774287490d3fcd97e' 
LIMIT 1

欢迎任何关于我的SQL中可能出现问题的想法

3 个答案:

答案 0 :(得分:8)

KEY是保留关键字,必须使用反引号进行转义。

SELECT  * 
FROM    wp_wpsc_api_keys 
WHERE   name = 'MichelleAllen17' AND 
        `key` = 'cbd1f3bb822e8617b624301774287490d3fcd97e' 
LIMIT   1

答案 1 :(得分:0)

在字段名称周围添加backtiks

...where `name`=... `key`

答案 2 :(得分:-1)

作为反引号的替代方法,另一种“最佳实践”模式是使用table_name或方便的表别名来对所有列名称进行QUALIFY,例如。

SELECT t.*
  FROM wp_wpsc_api_keys t 
 WHERE t.name='MichelleAllen17'
   AND t.key='cbd1f3bb822e8617b624301774287490d3fcd97e'
 LIMIT 1

这可以防止MySQL将列名“key”视为保留字。

让我们明确一点:查询中的问题并不是缺少反引号......问题是MySQL在查询文本中看到一个令牌(在本例中为“key”)作为保留字,而不是作为列的名称。解决方案是防止MySQL将该标记视为关键字。使用反引号是实现这一目标的一种方法,但它们不是必需的。

使用反引号是完全有效的,可以与限定列名一起完成。当列名包含空格或特殊字符时,需要使用反尖。这是相同的查询,表格和列名称用反引号括起来:

SELECT t.*
  FROM `wp_wpsc_api_keys` t 
 WHERE t.`name`='MichelleAllen17'
   AND t.`key`='cbd1f3bb822e8617b624301774287490d3fcd97e'
 LIMIT 1

我碰巧发现必须查看或输入不必要的反引号很烦人。使用击键(对我来说)更有用的是使列名称合格(“t.”),即使这不是必需的,只是因为我习惯于看到列名称合格时查询中有多个表(对于许多非常有用的查询,这种情况很多。)