为什么我必须在我的MySQL查询中使用表名周围的反引号?

Joh*_*man 3 mysql backticks

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

mysql_query("INSERT INTO quick_links WHERE ...etc");
Run Code Online (Sandbox Code Playgroud)

当这个查询完美地工作时:

mysql_query("INSERT INTO `quick_links` WHERE ...etc");
Run Code Online (Sandbox Code Playgroud)

是"快速"还是"链接"保留字??? 我不这么认为,但话说回来,我对MySQL很新,所以我道歉.另外,在某些"存储引擎"中使用必要的反引号(引用phpMyAdmin作为术语)?我碰巧使用"InnoDB",如果这有任何区别.

谢谢你的答案,我是MySQL的新手,我想确保我理解这些细微差别.

我的完整查询是这样的:

mysql_query("INSERT INTO `quick_links` VALUES (
    '$user_id', '$ql_name', '$ql_url', '$ql_img'
)"); 
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*Woo 8

Backtick仅用于逃避MySQL保留字.如果没有使用所提供的tableNames或columnNames所提供的任何保留关键字,则它们是可选的no spaces.

页面告知在架构中使用允许的字符.

  • 考虑一下你创造了一个名为"有空间"的桌子会有多么严重 (3认同)