这个MySQL预处理语句有什么问题?“未知”栏中的“where”条款


what's wrong with this MySQL prepared statement? "unkown column in where clause"

我使用一个准备好的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用反引号括起来。这应该只针对列名和表名,而不是值。

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

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

在MySQL中被认为是列/表名。你要求MySQL做的是返回类型列中的值与C列中的值相同的所有行,你实际上想要的是一个单引号(或双引号)。ie .

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