【问题标题】:what's wrong with this MySQL prepared statement? "unkown column in where clause"这个 MySQL 准备好的语句有什么问题? “where 子句中的未知列”
【发布时间】:2011-08-17 04:26:32
【问题描述】:

我正在使用带有此 SQL 代码的准备好的语句:

SELECT `name` FROM `securities` WHERE `symbol`=? AND `type`=`C`

但我在执行时不断收到此错误:

Column not found: 1054 Unknown column 'C' in 'where clause'

表是这样设置的:

+--------+-----------------------+------+------+
| symbol | name                  | type | used |
+--------+-----------------------+------+------+
| AED    | UAE Dirham            | C    | 0    |
| ALL    | Albanian Lek          | C    | 0    |
| ANG    | Neth Antilles Guilder | C    | 0    |
| ARS    | Argentine Peso        | C    | 0    |
| AUD    | Australian Dollar     | C    | 0    |
| AWG    | Aruba Florin          | C    | 0    |
| BBD    | Barbados Dollar       | C    | 0    |
| BDT    | Bangladesh Taka       | C    | 0    |
| BGN    | Bulgarian Lev         | C    | 0    |
| BHD    | Bahraini Dinar        | C    | 0    |
+--------+-----------------------+------+------+

我正在尝试从中查询只是的名称。我该如何解决这个错误?涉及绑定值的代码太长,无法发布,但基本上,它使用array($symbol) 执行准备好的语句。是否有我遗漏的 SQL 错误?

【问题讨论】:

  • 刚刚看到您的编辑。使用“C”(或“C”)时会收到什么错误消息。
  • 见下面我的评论;当我尝试使用单引号时,我没有在我的 PHP 代码的其他地方正确地转义它们,这会生成相同的消息。不过现在已经修好了。

标签: php mysql sql prepared-statement


【解决方案1】:

您的值 C 用反引号括起来。这应该只针对列和表名,而不是值。

将其更改为引号,它应该可以工作:

SELECT `name` FROM `securities` WHERE `symbol`=? AND `type`='C'

【讨论】:

  • 我没有正确转义我的单引号,这就是为什么当我最初用单引号尝试它时,它不起作用。感谢您的帮助!
  • 很高兴为您提供帮助!我也不是第一次这样做了。 :)
【解决方案2】:

反引号中的内容被假定为 MySQL 中的列/表名。您要求 MySQL 做的是返回 type 列中的值与 C 列中的值相同的所有行,您实际想要的是单引号(或双引号)。即。

SELECT `name` FROM `securities` WHERE `symbol`=? AND `type`='C'

【讨论】:

    猜你喜欢
    • 2015-03-22
    • 1970-01-01
    • 2015-04-25
    • 2019-07-02
    • 1970-01-01
    • 2015-03-16
    • 1970-01-01
    • 2011-02-27
    相关资源
    最近更新 更多