转义表名称MySQL

时间:2012-06-12 20:57:55

标签: php mysql sql escaping

我有一个转义表名的问题。我是如此愚蠢以至于我选择“show”作为桌子的名字。当我使用mysqli连接时,转义工作正常,但它不能与经典的mysql连接。有什么建议吗? 对不起我的英语,我不是母语。

SELECT SQL_CALC_FOUND_ROWS year, nameShow 
FROM   `show`
LIMIT 0, 10

我收到错误

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 'show' at line 2 –

查询

$sQuery = "
    SELECT SQL_CALC_FOUND_ROWS year, nameShow 
    FROM   `show`
    $sWhere
    $sOrder
    $sLimit
    ";

3 个答案:

答案 0 :(得分:6)

Section 9.3 of MySQL 5.1 Reference Manual 说回嘀嗒(`)或双引号(“),但是,我会按照上面的Fahim Parkar的评论来重新命名。

另外值得注意的是,如果每个Section 9.2使用双引号,则必须使用ANSI_QUOTES SQL模式:

  

如果启用了ANSI_QUOTES SQL模式,也允许使用   在双引号内引用标识符

答案 1 :(得分:5)

问题是YEAR不是SHOW。 YEAR是一个MySQL函数。 最佳做法是始终引用列和表名称,使事情也易于阅读。

应该是:

SELECT SQL_CALC_FOUND_ROWS `year`, `nameShow` 
FROM   `show`
LIMIT 0, 10

答案 2 :(得分:1)

反引号应该可以正常工作

尝试在SQL_CALC_FOUND_ROWS之后输入逗号,

SELECT SQL_CALC_FOUND_ROWS, year, nameShow 
FROM   `show`
LIMIT 0, 10