【问题标题】:MySQL-Error: Unknown column in where clauseMySQL-错误:where 子句中的未知列
【发布时间】:2014-01-13 21:53:33
【问题描述】:
<div class="ui-widget">

<form method="POST">
<?php

if(isset($_POST['search'])){

$connection = mysql_connect('localhost', 'root', '1234');
mysql_select_db('hoppers');

    $query = "SELECT user_name FROM users WHERE {$_POST['username']} = user_name";
    $result = mysql_query($query) or die ("MySQL-Error: " . mysql_error());
    $row = mysql_fetch_array($result);


if($row = TRUE){

        $present = $row['user_name'];
        echo $present;

     }else{
            echo "This User does not exist!";
        }
}
?>

<label for="tags">Username: </label>
<input type="text" id="tags" name = "username">
<input type="submit" name="search" value="Suchen!">
</form>
</div>

所以我总是收到以下错误消息:MySQL-Error: Unknown column 'dompol171' in 'where clause'。
因此,它将我输入的用户名与“user_name”列本身进行比较。我一直吓坏了...因为我不知道如何以不同的方式比较它!

【问题讨论】:

  • 关于使用 mysqli 的所有强制性内容在哪里? mysql_query() 不是还被弃用了吗?

标签: php mysql


【解决方案1】:

你在 where 子句中犯了一个错误,它是:

WHERE user_name = {$_POST['username']}";

语法是:Where "column" = "value"

【讨论】:

    【解决方案2】:

    你的参数倒过来了。列名总是在值之前:

    $query = "SELECT user_name FROM users WHERE user_name = {$_POST['username']}";
    

    这不像 PHP 中的比较运算符,其中操作数可以在等式的任一侧。

    【讨论】:

    • 你确定吗?
    【解决方案3】:

    这里发生的是$_POST['username'] 的值被视为列,因为您没有引用它,即将它设置为字符串。所以说用户名是 musa,它试图将列 musa 与列 user_name 进行比较(并且该列不存在)。应该是

     $query = "SELECT user_name FROM users WHERE 'some username' = user_name";
    

    【讨论】:

      【解决方案4】:

      尝试使用:

       $query = "SELECT user_name FROM users WHERE user_name = '{$_POST['username']}'";
      

      【讨论】:

      • 这给了我这个错误代码:解析错误:语法错误,意外''(T_ENCAPSED_AND_WHITESPACE),期望标识符(T_STRING)或变量(T_VARIABLE)或数字(T_NUM_STRING)
      • 所以这不会改变任何东西......它仍然无法比较!
      • 你的SQL语句怎么样? (我编辑了我的答案两次)
      • $query = "SELECT user_name FROM users WHERE user_name = '{$_POST['username']}'";这似乎有效...实际上我在回显结果时遇到了问题...
      【解决方案5】:

      查询需要微调,来自:

      $query = "SELECT user_name FROM users WHERE {$_POST['username']} = user_name";
      

      到:

      $query = "SELECT user_name FROM users WHERE user_name = '{$_POST['username']}'";
      

      将值用单引号括起来。

      这个更新的 PHP 将验证传回的数据:

      <?php
      if(isset($_POST['search'])){
      
      $connection = mysql_connect('localhost', 'root', '1234');
      mysql_select_db('hoppers');
      
      $query = "SELECT user_name FROM users WHERE user_name = '{$_POST['username']}'";
      $result = mysql_query($query) or die ("MySQL-Error: " . mysql_error());
      
      // count # of rows returned by DB query
      $num_users = mysql_num_rows( $result );
      
      // If more than 0
      if ( $num_users > 0 ){
          // Success!
          $row = mysql_fetch_array($result);
          var_dump( $row );
      } else {
          // No results returned
          echo "This User does not exist!";
      }
      
      
      }
      

      【讨论】:

      • 在这种情况下没有冲突...您的意思是在引用 $_POST 范围内吗? {} 括号可防止冲突。
      • 很高兴知道,对不起。
      • 谢谢你!所以现在它没有给我一个错误,但它不会显示结果! =(
      • 假设数据确实存在于数据库表中,您仍然需要对代码进行一些细微的调整。查看更新:)
      • 所以这在我的网站上给了我这个结果: array(2) { [0]=> string(4) "lisa" ["user_name"]=> string(4) "丽莎”}
      【解决方案6】:

      试试这个:

      $username = $_POST['username'];
      $query = "SELECT user_name FROM users WHERE user_name='" . $username . "'";
      

      【讨论】:

        猜你喜欢
        • 2012-04-25
        • 2011-03-22
        • 1970-01-01
        • 1970-01-01
        • 2021-09-19
        • 2018-04-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-11
        相关资源
        最近更新 更多