【问题标题】:Select * from Select从选择中选择 *
【发布时间】:2016-12-12 00:48:09
【问题描述】:

我知道这是非常奇怪的情况,但是我不知何故陷入了这种情况。我必须通过在 url 中传递一些参数来连接到其他一些系统服务。

在他们的服务中,他们使用我传递的参数创建一些查询。

就我而言,我必须将“Select”作为参数名传递,这实际上是他们这边的一些类名。所以他们最终将查询创建为Select * from select 和一些条件。

在执行时我收到错误响应:

'SQL 查询或筛选表达式中存在语法错误 1,位置 186。看到“选择”但预期 '..SQL: \"SELECT col1, col2 FROM Select AS D where 一些条件。

有人可以帮我解决这个问题吗?

【问题讨论】:

  • Select 是一个保留字

标签: mysql sql database select


【解决方案1】:

建议不要使用 MySQL 保留关键字.. 但如果有必要有一个解决方案..

使用这个,它会为你工作:

select * from yourdatabasename.select

【讨论】:

  • 感谢您的解决方案,但当我们在应用程序本身中创建服务或 sql 查询时,它可能会很有用。但是,在我的情况下,它是我调用的第三方服务,因此此解决方案将创建不必要的紧密耦合场景。而且我不确定应用程序是否会与我共享架构和数据库名称。
【解决方案2】:

由于Select 是保留字,您必须通过用反引号字符将其转义,以便 MySQL 处理您的查询:

select * from `select`

【讨论】:

  • 或者更好,不要使用保留字作为表名
  • @JuanCarlosOropeza 当然可以,但是 OP 写了“我必须将 'Select' 作为参数名称传递”,所以我想他在这种特殊情况下无法更改它
  • 是的,我知道。您的解决方案没问题,但 OP shuold 解决了根本问题。如果他正在调用服务,那么问题出在服务端创建查询的方式上。我可以从这里感觉到 sql 注入 ;)
  • 服务端已经为此部署了一些更改,现在我可以获取数据了。但如果我们必须为这类问题编写解决方案,这仍然是一个不错的选择。
猜你喜欢
  • 2012-09-12
  • 2021-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-28
  • 2018-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多