【问题标题】:MySQL: Unknown column in where clause errorMySQL:where子句错误中的未知列
【发布时间】:2009-09-26 03:10:59
【问题描述】:

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

【问题讨论】:

    标签: php mysql sql mysql-error-1054


    【解决方案1】:

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

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

    用单引号替换反引号。

    【讨论】:

      【解决方案2】:

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

      SELECT * from users WHERE uname = 'test';
      

      你必须只引用表名,而不是数据库。假设数据库名为tutorial

      【讨论】:

      • 是的,我认为他在查询中添加了数据库的名称.. 或者他想从 uname='test'; 的用户中选择 tutorial.users;
      • np。不要忘记选择一个答案 :) 并欢迎使用 Stackoverflow。
      【解决方案3】:

      示例:

      $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 出错。

      我希望这可以帮助并原谅我的英语不太好

      【讨论】:

      • 很好的答案。帮助我更好地了解何时使用 ' 以及何时不使用。谢谢
      【解决方案4】:

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

      Unknown column 'departure' in 'where clause'
      

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

      我随后将查询更改为:

      Unknown column 'depature' in 'where clause' 
      

      它成功了!

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

      我希望这会有所帮助。

      【讨论】:

        【解决方案5】:

        在从 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" ; '
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-01-26
          • 2012-04-25
          • 2012-02-29
          • 2015-09-11
          • 2018-05-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多