【问题标题】:Escape table name MySQL转义表名 MySQL
【发布时间】:2012-06-12 20:57:54
【问题描述】:

我在转义表名时遇到了一点问题。我太愚蠢了,我选择“显示”作为表名。当我使用 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
    ";

【问题讨论】:

  • 你得到什么错误?
  • 当你犯这个错误时,总是触发RENAME TABLE tbl_name TO new_tbl_name 命令并为表提供正确的名称:)
  • 我收到了这个错误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
  • 您可以尝试在 from 前面加上数据库名称(此时不需要反引号)。 FROM dbname.show
  • 我无法重命名表,因为它正在运行项目,我将不得不重命名它并在代码中找到它。

标签: php mysql sql escaping


【解决方案1】:

Section 9.3 of MySQL 5.1 Reference Manual 表示反引号 (`) 或双引号 ("),但是,我会使用上面 Fahim Parkar 的评论并重命名表格。

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

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

【讨论】:

  • 最后我得到了工作查询。我不知道为什么其他解决方案不起作用。但这有效:serialtracker.`show`
【解决方案2】:

问题在于 YEAR 而不是 SHOW。 YEAR 是一个 MySQL 函数。 最佳做法是始终引用列名和表名,这样也便于阅读。

应该是:

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

【讨论】:

【解决方案3】:

反引号应该可以正常工作

尝试在 SQL_CALC_FOUND_ROWS 后面加一个逗号,

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

【讨论】:

  • 我知道应该。但我不知道我做错了什么。 $sQuery = " SELECT SQL_CALC_FOUND_ROWS year, nameShow FROM show` $sWhere $sOrder $sLimit ";`
  • @zdarsky.peter :您可以在您的问题中发布您的查询吗?在上面的查询中,show? 之后的 $s 是什么?我认为这是你的问题
猜你喜欢
  • 1970-01-01
  • 2012-07-16
  • 1970-01-01
  • 1970-01-01
  • 2012-10-04
  • 2011-09-30
  • 2021-05-24
  • 1970-01-01
相关资源
最近更新 更多