【问题标题】:Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in line 34 [duplicate]警告:mysql_fetch_array() 期望参数 1 是资源,第 34 行中给出的布尔值 [重复]
【发布时间】:2014-01-03 10:02:04
【问题描述】:

我不知道怎么了,我明白了:

警告:mysql_fetch_array() 期望参数 1 是资源,在中给出布尔值。

我的fetch_array 有问题。它在

第 34 行 while($row = mysql_fetch_array($sql))

<?php
    mysql_connect("localhost", "root", "");
    mysql_select_db("blog1");

    ?>

    <!DOCTYPE html>
    <html>
    <head>

        <title>BLOGGEN</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
        <meta name="description" content="" />


        <link rel="stylesheet" type="text/css" href="css/kickstart.css" media="all" />
        <link rel="stylesheet" type="text/css" href="style.css" media="all" /> 


        <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
        <script type="text/javascript" src="js/kickstart.js"></script>
    </head>
    <body>

            <ul class="menu">
            <li class="current"><a href="index.php">Hem</a>
            </li>
            <li><a href="blogg.php">Din Blogg</a>
            </ul>

            <?php
            $sql = mysql_query("SELECT * FROM blogdata ORDER BY id DESC");
            while($row = mysql_fetch_array($sql)){
            $title = $row["title"];
            $content = $row["content"];
            $category = $row["category"];

            ?>

            <table border = "1">
            <tr><td><?php echo $title; ?></td><td><?php echo $category; ?></td></tr>
            <tr><td colspan="2"><?php echo $content; ?></td></tr>
        </table>
            <?php
            }
            ?>      


        </div>

    </div> 
    </body>
    </html>

【问题讨论】:

  • 停止使用 mysql_* 并改用 pdo/mysqli? @tomexsans 已编辑;)
  • 您可能会从查询中得到false
  • 回显您的查询,然后在 phpmyadmin 或 sqlyog 执行它...
  • 调试发生了什么。
  • @tomexsans - Stackoverflow:自 2008 年以来的众包调试:P

标签: php mysql


【解决方案1】:

您的查询 ($sql) 没有生成查询资源,而是生成了 FALSE。

要调试,试试这个:

 <?php
        $sql = mysql_query("SELECT * FROM blogdata ORDER BY id DESC") or die(mysql_error());
        if(mysql_num_rows($sql)>0)
        {
            while($row = mysql_fetch_array($sql)){
            $title = $row["title"];
            $content = $row["content"];
            $category = $row["category"];

            ?>

            <table border = "1">
            <tr><td><?php echo $title; ?></td><td><?php echo $category; ?></td></tr>
            <tr><td colspan="2"><?php echo $content; ?></td></tr>
        </table>
            <?php
            }
        }
        ?>      

mysql_error() 错误消息将引导您找到解决方案。

注意

mysql_ 函数已弃用,请改用 PDO 或 mysqli。

【讨论】:

  • 好吧,我做到了,现在我没有选择数据库。
  • @user3046121 使用 mysql_select_db() 函数选择您的数据库。就是这样..:)
  • 是的,如果您查看我的代码,我知道。我的代码顶部有这个功能。是不是放错地方了?
  • 你确定 blog1 数据库存在吗?
【解决方案2】:

您对mysql_query 的调用返回false 而不是资源。检查您的日志以查找 SQL 错误,或致电 mysql_error

在尝试获取结果之前,您应该检查您的查询是否正常:

if (!$sql) {
    echo "something went wrong in the query: ".mysql_error();
} else {
    // process data
}

话虽如此,停止使用mysql_*,它已被弃用。改用 MySQLi 或 PDO 并使用准备好的语句。

【讨论】:

  • 这可能是真的 - 但为什么,以及如何处理呢?
【解决方案3】:

这个错误说明你有一个mysql错误,结果为空时不会触发这个错误。

您的查询失败,因此不会产生查询资源,而是产生 FALSE。

检查您的 sql 语法,或尝试回显mysql_error()

【讨论】:

    【解决方案4】:

    错误可能出现在以下两行!

    mysql_connect("localhost", "root", "");
    mysql_select_db("blog1");
    

    所以,把它们改成!

    mysql_connect("localhost", "root", "") or die(mysql_error());
    mysql_select_db("blog1") or die(mysql_error());
    

    你会发现哪里出了问题

    或以下行可能有错误

    $sql = mysql_query("SELECT * FROM blogdata ORDER BY id DESC");
    

    所以,添加一行来回显错误

    if( !$sql ) die(mysql_error());
    

    当您看到错误消息时,请修复它。 最后,不推荐使用 mysql_* 函数!

    【讨论】:

    • 谢谢,知道了:)
    猜你喜欢
    • 2013-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 2012-12-20
    • 1970-01-01
    相关资源
    最近更新 更多