转义表名称MySQL

zda*_*ter 6 php mysql sql escaping

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

SELECT SQL_CALC_FOUND_ROWS year, nameShow 
FROM   `show`
LIMIT 0, 10
Run Code Online (Sandbox Code Playgroud)

我得到错误

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 –
Run Code Online (Sandbox Code Playgroud)

询问

$sQuery = "
    SELECT SQL_CALC_FOUND_ROWS year, nameShow 
    FROM   `show`
    $sWhere
    $sOrder
    $sLimit
    ";
Run Code Online (Sandbox Code Playgroud)

xel*_*o52 7

MySQL 5.1参考手册的9.3节说回嘀嗒声(`)或双引号("),但是,我会按照上面的Fahim Parkar的评论来重新命名.

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

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


小智 5

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

应该:

SELECT SQL_CALC_FOUND_ROWS `year`, `nameShow` 
FROM   `show`
LIMIT 0, 10
Run Code Online (Sandbox Code Playgroud)