6

我有一个 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`
4

5 回答 5

37

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

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

用单引号替换反引号。

于 2009-09-26T03:43:57.620 回答
9

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

SELECT * from users WHERE uname = 'test';

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

于 2009-09-26T03:13:38.107 回答
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 出错。

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

于 2012-06-10T15:52:01.430 回答
0

我有同样的问题,结果是一个错字。我的错误信息是:

Unknown column 'departure' in 'where clause'

我检查了表格中的那一列,结果发现,我在表格中将其拼写为“出发”而不是“出发”,因此抛出了错误消息。

我随后将查询更改为:

Unknown column 'depature' in 'where clause' 

它奏效了!

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

我希望这会有所帮助。

于 2013-10-16T10:41:43.133 回答
0

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

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" ; '
于 2017-04-08T08:41:32.257 回答