这个MySQL预处理语句出了什么问题? “where子句中的未知列”

时间:2011-08-16 20:23:40

标签: php mysql sql prepared-statement

我正在使用带有此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错误?

2 个答案:

答案 0 :(得分:3)

您在反引号中附加了值C。这应仅针对列名和表名进行,而不是对值进行。

将其更改为引号,它应该有效:

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

答案 1 :(得分:2)

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

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