【问题标题】:Why did I have to use backticks around the table name in my MySQL query?为什么我必须在 MySQL 查询中的表名周围使用反引号?
【发布时间】:2012-09-21 10:41:39
【问题描述】:

据我所知,例如查询中的表名不需要反引号:(“INSERT INTO table_name....”)。此外,据我所知,在名称中使用下划线是完全可以接受的语法:foo_bar。那么我的问题是,为什么这个查询会失败:

mysql_query("INSERT INTO quick_links WHERE ...etc");

当这个查询完美运行时:

mysql_query("INSERT INTO `quick_links` WHERE ...etc");

“快速”或“链接”是保留字???我不这么认为,但话又说回来,我对 MySQL 还很陌生,所以我很抱歉。另外,在某些“存储引擎”中是否需要使用反引号(术语参考 phpMyAdmin)?如果这有什么不同,我碰巧正在使用“InnoDB”。

感谢您的回答,我是 MySQL 新手,我想确保自己了解这些细微差别。

我的完整查询是这样的:

mysql_query("INSERT INTO `quick_links` VALUES (
    '$user_id', '$ql_name', '$ql_url', '$ql_img'
)"); 

$ql_url 和 $ql_name 是通过 $_POST 获得的,然后在用于查询之前使用 trim 和 mysql_real_escape_string 进行清理。 $ql_img 只是一个 url,指向一个上传缩略图的目录,而 $user_id 是用来识别登录的特定用户的。这两个查询从字面上看是完全相同的,除了周围的反引号表名。

【问题讨论】:

标签: mysql backticks


【解决方案1】:

反引号仅用于转义 MySQL Reserved words。如果不使用任何保留关键字,则它们是可选的,前提是使用的 tableNames 或 columnNames 上有 no spaces

这个page告诉了架构中允许使用的字符。

【讨论】:

  • 想一想你会打败一个创建名为“有空格”的表的人的严重程度
  • 我们还需要在 PostgreSQL 中使用它们吗?
猜你喜欢
  • 1970-01-01
  • 2018-07-13
  • 2016-10-17
  • 2020-07-18
  • 2010-09-20
  • 2021-02-28
  • 2018-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多