MySQL:where子句错误中的未知列

时间:2009-09-26 03:10:59

标签: php mysql sql mysql-error-1054

我有一个PHP脚本,由于某种原因,mysql继续将值视为选择/插入列。以下是我的SQL查询示例:

$query = mysql_query("SELECT * FROM tutorial.users WHERE (uname=`".mysql_real_escape_string($username)."`)") or die(mysql_error());

变成:

SELECT * FROM tutorial.users WHERE (uname=`test`)

错误是:

  

'where'中的未知列'test'   条款“

我也尝试过:

SELECT * FROM tutorial.users WHERE uname=`test`

5 个答案:

答案 0 :(得分:34)

在MySql中,反引号表示标识符是列名。 (其他RDBMS使用括号或双引号)。

所以你的查询是,“给我所有行,其中名为'uname'的列中的值等于名为'test'的列中的值”。但是,由于表中没有名为test的列,因此您会收到错误。

用单引号替换反引号。

答案 1 :(得分:9)

奇怪?怎么会这样?它确切地说出了什么是错的。您的表中没有“测试”列。你确定你有合适的桌子吗? 'tutorial.users'?你确定表的名称不同吗?也许你打算这样做

SELECT * from users WHERE uname = 'test';

您必须仅引用表名,而不是数据库..假设数据库名为tutorial

答案 2 :(得分:4)

示例:

$uname = $_POST['username'];
$sql="SELECT * FROM Administrators WHERE Username LIKE '$uname'"

请注意$ uname周围的单引号。当您回显查询时,这是输出 -

SELECT * FROM Administrators WHERE Username LIKE 'thierry'

但是如果你错过了查询中$ uname变量的引用,那么这就是你得到的 -

SELECT * FROM Administrators WHERE Username LIKE thierry

在MySQL服务器上,2个查询不同。 thierry是输入字符串并正确封装在引号中,与第二个查询中一样,它不是,这会导致MySQL出错。

我希望这有助于并帮助我的英语不是很好

答案 3 :(得分:0)

我遇到了同样的问题,结果却是一个错字。 我的错误消息是:

Unknown column 'departure' in 'where clause'

我检查了表格中的那一列,事实证明,我在表格中将其拼写为“depature”而不是“离开”,因此抛出错误信息。

我随后将查询更改为:

Unknown column 'depature' in 'where clause' 

它有效!

所以我的建议很明确,请仔细检查你是否正确拼写了列名。

我希望这会有所帮助。

答案 4 :(得分:0)

我还在where子句"中遇到了"未知列的问题。从linux(bash)命令行执行以下操作时。

mysql -u support -pabc123 -e 'select * from test.sku where dispsku='test01' ; '

这就是我得到的

ERROR 1054 (42S22) at line 1: Unknown column 'test01' in 'where clause'

我不得不更换单引号' test01'用双引号" test01" 。它对我有用。

表示你执行sql查询的方式和方式有所不同。

在为脚本中的变量赋值时,以及稍后在sql语句中使用该脚本必须执行的变量时,会有轻微的区别。

如果假设变量是

var=testing

并且您希望将此值从脚本中传递给mysql,然后使用单引号工作。

select '$var'

因此,不同的引擎可能会以不同的方式评估反引号和引号。

这是我在linux命令行中运行的查询。

mysql -u support -pabc123 -e 'select * from test.sku where dispsku="test01" ; '