我有一个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`
答案 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" ; '