【问题标题】:Select * syntax changed选择 * 语法已更改
【发布时间】:2020-07-30 00:06:19
【问题描述】:

在不更改任何设置的情况下,包含 table.`*` 这样的反引号的查询不再有效,必须是 table.*

这发生在生产服务器(MySQL 5.7.31-0ubuntu0.16.04.1-log)上,原因不明。

为什么我们使用反引号:在 HeidiSQL 中编辑并输入 select table.* 时,它会自动将其更改为 select table.`*` ,我们已将其原样复制到 PHP 页面中。

查询是:

select u.`*` from users u

昨天运行良好多年(没有对 MySQL 的任何一个 PHP 进行任何更改或升级,它开始出现错误:1054- Unknown column 'u.*' in 'field list

将查询替换为以下查询解决了问题:

select u.* from users u

有趣的是,u.`field` 仍然可以正常工作。

【问题讨论】:

  • 页面没有显示我输入的内容,应该是 table 。 '*'(不带空格)
  • 你能粘贴你使用的查询吗?
  • 提供之前安全执行的查询文本示例,添加现在为该查询执行尝试生成的错误消息文本(完整且未更改)。

标签: php mysql heidisql


【解决方案1】:

我能说的最好的:更改将需要在您生成查询的任何代码中,这可能会从表中解析出您的单引号。至少可以追溯到 MySQL 5.4,我可以在 SQLFiddle 上测试这会引发错误,而且语法一开始就没有多大意义。如果您没有 table. 前缀,则查询带引号的星号 (Select '*' FROM table;) 只会返回与 table 长度相同的单列星号列表。我不相信这是 MySQL 的变化。

【讨论】:

    猜你喜欢
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多