为啥 MariaDB 不接受我的字符串变量作为我的 sql 查询中的表名?

Posted

技术标签:

【中文标题】为啥 MariaDB 不接受我的字符串变量作为我的 sql 查询中的表名?【英文标题】:Why won't MariaDB accept my string variable as table name on my sql query?为什么 MariaDB 不接受我的字符串变量作为我的 sql 查询中的表名? 【发布时间】:2020-02-13 03:50:17 【问题描述】:

我在从我的 xampp 数据库中检索数据数据时遇到问题。我对此很陌生,所以我不知道如何解决它。这是我的代码:

Dim contract As String

Private Sub projectchart()
  OpenConnection()
  sql = "SELECT activityname, progress FROM '" & contract & "';"
  dr = cmd.ExecuteReader
  Chart2.Series("Progress").Points.Clear()

  While dr.Read
    Chart2.Series("Progress").Points.AddXY(dr("activityname"),dr("progress"))
  End While

  cmd.Dispose()
  con.Close()
End Sub

当我运行此代码时,会出现此错误

您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 1 行的“c00101”附近使用正确的语法

c00101 是表名,是变量合约所持有的内容

但是当我尝试以下面的格式运行代码时,一切运行正常,我试图用来显示数据的图表完美运行。

sql = "SELECT activityname, progress FROM c00101;"


我真的不知道为什么会这样。有谁能帮帮我吗?

【问题讨论】:

【参考方案1】:

如果您查看的是实际的 SQL,而不是构建它的代码,您就会看到不同之处,即单引号。那是为了指定文本值。就像您在 VB 中将双引号括住文字 Strings 而不是围绕变量或其他标识符一样,因此您在 SQL 中将单引号括在文本文字周围,而是围绕标识符。

【讨论】:

* 不是围绕标识符?或者反引号可以用于quote identifiers in mysql @AndrewMorton,是的,坟墓(它们的正确名称)用于在 MySQL 中转义标识符,就像在 Microsoft 风格的 SQL 中使用括号一样,事实上,在 VB 中也是如此。无论是在 SQL 中还是在 VB 中,通常在标识符是保留字或包含特殊字符并且不会被解释为标识符时这样做。显然,这个表名没有问题,所以不需要转义。 对不起,我很难理解您的回答。你能进一步解释一下吗? 我刚才真的想通了。感谢您指出单引号的正确用法。 @jmcilhinney 根据维基词典,它是重音,复数是重音。显然像我们在墓地参观的那样发音。我认为另一种发音是在第一个音节中带有短 a 或 schwa a 的 gra-ve。

以上是关于为啥 MariaDB 不接受我的字符串变量作为我的 sql 查询中的表名?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 If 语句在 PHP 中接受不正确的字符串条件?

为啥我的程序接受用户输入的次数不超过两次?

为啥 Replace() 字符串方法不修改我的字符串变量?

在我的 Rails 项目中使用 MariaDB 而不是 MySQL

如何接受部分变量(字符串)作为cobol中的动态值?

为啥 Postgres 不接受我的计数列?