-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.netPHPでのデータベースクエリに関連するドキュメントのウェブサイトをチェックしました。mysql_query私は基本的なものも試しましたmysql_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_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 に答える
2

mysql_db_query() は失敗すると FALSE を返します。まず、常に mysql_db_query() よりも mysql_select_db() と mysql_query() を使用してください。次に、結果コードを使用する前にエラーがないか確認してください。mysql_error() は、デバッグ目的でエラーを取得できます。

于 2012-04-04T16:41:08.643 に答える
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 に答える