我遇到了一个奇怪的情况,PHP执行了一个SQL查询,也许有人可以对此有所了解:
我的查询中写道:
"SELECT COLUMN_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = $table
AND COLUMN_NAME = $column"
查询应该在执行时返回一个字符串:enum('A','B'[,'C'...])
(就像从命令行运行查询时一样。$table
和$column
被传递给进行查询的函数,在我的测试用例中是正确的 - 分别作为表和列存在。在这种情况下,让我们设置$table = 'profile'
和$column = 'gender'
,上面的SQL语句将返回以下错误:
Unknown column 'profile' in 'where clause' in /registry/mysqldb.class.php on line 31
第31行是一个缓存函数,用于在查询失败前缓存查询,或在查询失败时触发错误。在其他所有情况下都可以正常工作。在发出请求时,我已连接到正确的数据库。
我的问题是:为什么'个人资料'被解释为一个列并导致错误?
答案 0 :(得分:5)
也许是因为你缺少变量的引号。尝试:
"SELECT COLUMN_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = '$table'
AND COLUMN_NAME = '$column'"