【问题标题】:PHP giving boolean error with mysql_fetch_row [duplicate]PHP使用mysql_fetch_row给出布尔错误[重复]
【发布时间】:2012-03-30 00:46:28
【问题描述】:

可能重复:
PHP Error: mysql_fetch_array() expects parameter 1 to be resource, boolean given

这就是我的错误:

Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given in /home/content/12/8781812/html/internal/domain/property/process.php on line 17

代码是:

function checkTOS($username){
    include("includes/opendb.php");

    $user2check = mysql_real_escape_string($_POST['username']);
    $query = "SELECT * FROM user WHERE username=".$user2check;
    $result = mysql_query($query);
    while($row = mysql_fetch_row($result)){
        $TOS = $row[11];
        }
 if($TOS == 1){
        return true;
    }else{
        return false;
    }

 }

第 17 行是:

while($row = mysql_fetch_row($result)){

这基本上是检查用户是否接受了主用户数据库中的服务条款。

编辑:

所以我修复了它,但现在当我尝试打印我的行时我什么也没得到......这是新代码。

function checkTOS($preusergrab){
    include("includes/opendb.php");

    $query = "SELECT * FROM users WHERE username='".$preusergrab."'";
    $result = mysql_query($query) or die(mysql_error());

    while($row = mysql_fetch_row($result)){
        $TOS = $row[11];
        }

        // echo $query;
        print_r($row);
        die();

【问题讨论】:

  • 您必须在查询中将值括在单引号中。即$query = "SELECT * FROM user WHERE username='".$user2check."'";
  • @Rook 这有什么问题呢?
  • @JD Audi 您显然不了解引号是什么以及我们为什么需要它们的基础知识。通过扩展,您不知道 mysql_real_escape_string 的作用以及在查询中使用它的原因。使用 PDO 或 ADOB 等参数化查询。
  • 使用参数化查询,这就是我在帖子中所说的。该死的。
  • stackoverflow.com/… 5,000+ 次重复。 google.com/… 360 万。

标签: php mysql boolean


【解决方案1】:

阅读您的错误:

mysql_fetch_row() 期望参数 1 是资源,给定的布尔值

所以这意味着 $result 是一个布尔值。当 mysql_query 出错时会发生这种情况。这反过来意味着你的 SQL 是错误的。

"SELECT * FROM user WHERE username='".$user2check."'";

应该会更好。

【讨论】:

    【解决方案2】:

    我认为查询不正确,因此出现错误,mysql_query 返回 false,这就是为什么你有一个布尔值

    【讨论】:

      【解决方案3】:

      如果查询不成功mysql_query返回一个布尔值...替换

      $result = mysql_query($query);
      

      与:

      $result = mysql_query($query);
      if (!$result) {
          die('Invalid query: ' . mysql_error());
      }
      

      【讨论】:

        【解决方案4】:

        您忘记了查询字符串中 $username 周围的引号,导致用户名被视为不存在的字段名。查询失败,返回一个布尔值 false,然后你盲目地尝试在 fetch 调用中使用它,从而触发你的错误。

        $query = "SELECT * FROM user WHERE username='".$user2check . "'";
                                                    ^--           ^^^^^^---missing
        

        如果你甚至有最简单的错误处理,你就会看到错误:

        $result = mysql_query($query) or die(mysql_error());
        

        【讨论】:

          【解决方案5】:

          您需要在查询中引用您的用户名:

          $query = "SELECT * FROM user WHERE username='".$user2check."'";
          

          现在,您的 sql 查询无效。

          【讨论】:

            【解决方案6】:

            您的查询失败。这就是为什么它是一个布尔值。

            $result = mysql_query($query);
            if ($result === FALSE) {
              die("My query failed : " . mysql_error());
            }
            

            【讨论】:

            • 不要为错误信息输出一个固定的字符串。找出问题所在是完全没有用的。在开发/调试时始终输出真正的错误消息:... or die(mysql_error())
            猜你喜欢
            • 1970-01-01
            • 2014-02-27
            • 1970-01-01
            • 2017-05-15
            • 2017-02-08
            • 2012-10-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多