-1

可能重复:
警告:mysql_fetch_* 期望参数 1 是资源,布尔给定错误

我正在使用 MySQL 作为数据库的 PHP 项目。
这是我的代码片段。

$query = "SELECT * FROM FEED_DETAILS";  
$result = mysql_db_query (DB_NAME, $query, $conn);
while($row = **mysql_fetch_assoc($result)**)  
{  
// Things i need to execute....  
}

DB_NAME是我之前定义的。
这以前对我有用。但是这次它给出了以下错误

<b>Warning</b>:  mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in <b>C:\xampp\htdocs\My_Rss\classes\RSS.class.php</b> on line <b>28</b><br />

我使用的唯一参数是 $result。我已经在php.net网站上查看了与 php 中的数据库查询相关的文档。我什至尝试过基本的mysql_querymysql_fetch_array
在我去年学习 php 时制作的所有以前的程序中都会产生相同的错误。他们以前都曾经工作过。这一次他们停止了工作。

注意

  • 我正在使用最新版本的 XAMPP(即 1.7.7)
  • 我正在使用 PHP 5.3.8。
  • 前几天将phpmyadmin版本升级到3.4.10.2。
  • 其余是默认的 XAMPP 1.7.7 设置。

我听说 php 5.3 发生了重大变化并导致了问题。这是问题吗,因为我无法指出代码中的错误..

这是index.php

 <?
    header("Content-Type: application/xml; charset=ISO-8859-1");
    include("classes/RSS.class.php");
    $rss = new RSS();
    echo $rss->GetFeed();
?>

这是RSS.class.php

class RSS
{
    public function __construct()
    {
        require_once ('./classes/mysql_connect.php');
    }

    public function GetFeed()
    {
        return $this->getDetails() . $this->getItems();
    }

    private function dbConnect()
    {
        //DEFINE ('LINK', mysql_connect (DB_HOST, DB_USER, DB_PASSWORD));
    }

    private function getDetails()
    {
        $detailsTable = "webref_rss_details";
        $this->dbConnect($detailsTable);
        $query = "SELECT * FROM FEED_DETAILS";
        $result = mysql_query ($query) or trigger_error(mysql_error()." ".$query);

             while($row = mysql_fetch_assoc($result))
        {
            $details = '<?xml version="1.0" encoding="ISO-8859-1" ?>
                    <rss version="2.0">
                        <channel>
                            <title>'. $row['title'] .'</title>
                            <link>'. $row['link'] .'</link>
                            <description>'. $row['description'] .'</description>
                            <language>'. $row['language'] .'</language>
                            <image>
                                <title>'. $row['image_title'] .'</title>
                                <url>'. $row['image_url'] .'</url>
                                <link>'. $row['image_link'] .'</link>
                                <width>'. $row['image_width'] .'</width>
                                <height>'. $row['image_height'] .'</height>
                            </image>';
        }
        return $details;
    }

    private function getItems()
    {
        $itemsTable = "webref_rss_items";
        $this->dbConnect($itemsTable);
        $query = "SELECT * FROM FEED_ITEMS";

        $result = mysql_query ($query) or trigger_error(mysql_error()." ".$query);
        //print_r($result);
        //$row = mysql_fetch_assoc($result);
        //print_r($row);

        $items = '';
        while($row = mysql_fetch_array($result))
        {
            $items .= '<item>
                         <title>'. $row["title"] .'</title>
                         <link>'. $row["link"] .'</link>
                         <description><![CDATA['. $row["description"] .']]></description>
                     </item>';
        }
        $items .= '</channel>
                 </rss>';
        return $items;
    }

}
4

3 回答 3

2

mysql_db_query() 在失败时返回 FALSE。首先,总是使用 mysql_select_db() 和 mysql_query() 而不是 mysql_db_query()。其次,在使用之前检查您的结果代码是否有错误。mysql_error() 可以检索错误以进行调试。

于 2012-04-04T16:41:08.643 回答
2

这不是 mysql_fetch_assoc() 而是 mysql_db_query 的问题。

[至少]以这种方式运行您的查询

$query  = "SELECT * FROM FEED_DETAILS";  
$result = mysql_query ($query) or trigger_error(mysql_error()." ".$query);

因此,您将始终收到任何问题的通知。或者,更好的是,将此代码封装到某个抽象库中。

在开发环境中始终error_reporting保持E_ALL水平和display_errors设置也很有帮助on

于 2012-04-04T16:53:30.217 回答
1

mysql_db_query()自 php 5.3 起已弃用

采用mysql_query()

例子:

mysql_select_db(DB_NAME);
$result = mysql_query ($query, $conn) or die(mysql_error());
于 2012-04-04T16:42:36.650 回答