Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中MySql查询的异常行为_Php_Mysql - Fatal编程技术网

PHP中MySql查询的异常行为

PHP中MySql查询的异常行为,php,mysql,Php,Mysql,可能重复: 我正在用PHP做一个以MySQL为数据库的项目。 这是我的代码片段 $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\u名称是我之前定义的。 这以前对我有用。但这次它给出

可能重复:

我正在用PHP做一个以MySQL为数据库的项目。
这是我的代码片段

$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\u名称
是我之前定义的。
这以前对我有用。但这次它给出了以下错误

<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 />
这是
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;
    }

}
类RSS
{
公共函数构造()
{
需要_once('./classes/mysql_connect.php');
}
公共函数GetFeed()
{
返回$this->getDetails()。$this->getItems();
}
私有函数dbConnect()
{
//定义('LINK',mysql_connect(DB_主机,DB_用户,DB_密码));
}
私有函数getDetails()
{
$detailsTable=“webref\u rss\u details”;
$this->dbConnect($detailsTable);
$query=“从提要_详细信息中选择*”;
$result=mysql\u query($query)或trigger\u error(mysql\u error().“”.$query);
while($row=mysql\u fetch\u assoc($result))
{
$details=
“.$row['title']”
“.$row['link']”
“.$row['description']”
“.$row[“语言”]”
“.$row['image_title']”
“.$row['image_url']”
“.$row['image_link']”
“.$row['image_width']”
“.$row['image_height']”
';
}
返回$details;
}
私有函数getItems()
{
$itemsTable=“webref\u rss\u items”;
$this->dbConnect($itemsTable);
$query=“从提要项目中选择*”;
$result=mysql\u query($query)或trigger\u error(mysql\u error().“”.$query);
//打印(结果);
//$row=mysql\u fetch\u assoc($result);
//打印(行);
$items='';
while($row=mysql\u fetch\u数组($result))
{
$items.='
“.$row[“title”]”
“.$row[“链接”]”
';
}
$items.='
';
退回$items;
}
}
mysql\u db\u query()失败时返回FALSE。首先,在mysql\u db\u query()上始终使用mysql\u select\u db()和mysql\u query()。第二,在使用结果代码之前检查它是否有错误。mysql\u error()可以检索错误以进行调试。

mysql\u db\u query()

使用mysql\u query()

例如:

mysql_select_db(DB_NAME);
$result = mysql_query ($query, $conn) or die(mysql_error());

这不是mysql\u fetch\u assoc(),而是mysql\u db\u查询问题

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

$query  = "SELECT * FROM FEED_DETAILS";  
$result = mysql_query ($query) or trigger_error(mysql_error()." ".$query);
因此,任何问题都会通知您。 或者,更好的做法是将此代码封装到某个抽象库中


在开发环境中,始终在
eall
级别执行
error\u reporting
,并在
display\u errors
上执行
设置
mysql\u db\u query
——此函数从PHP 5.3.0开始就被弃用。这不是异常行为,您的代码是错误的。该代码已弃用。因此,它应该显示一个弃用警告。但在这里,代码返回$result中的布尔值。它应该返回一个资源。你的观点是什么?它仍然被弃用。如果你不想遇到问题,那就不要使用它。它甚至在文档中说:
非常不鼓励依赖此功能。
我已经根据下面的第一个答案更改了代码<代码>打印(结果)显示
资源id#6
。但是while循环仍然没有得到控制。我已经添加了注释,这些更改,看看我在第一个回答中的注释,为什么你不能显示你的全部代码?哈哈,mysql扩展被弃用了,他应该开始使用mysqli函数或pdo_mysql函数!甚至mysql_query()也会被抹黑。。您应该使用mysqli(),直到您的代码出现错误时才会触发错误。但是现在控件没有进入while循环<代码>打印($result)
显示
资源id#6
但执行停止在那里。然后我试着打印($row)查看它为什么没有进入循环。那也不走运。我在里面声明了一个变量
$detail
,而最后一个错误是
XML解析错误:文档元素位置后的垃圾:http://localhost/My_rss/ 第2行第1列:注意:未定义变量:第47行的C:\xampp\htdocs\My_Rss\classes\Rss.class.php中的详细信息。。。您只定义了detail…变量是$details。现在我已经在while循环之外预先声明了它,但是由于while循环是生成大部分XML的部分,所以它的执行非常重要,根据您的建议更改了代码,现在它没有进入while循环。这是完整的错误
XML解析错误:文档元素位置后的垃圾:http://localhost/My_rss/ 第2行第1列:注意:未定义变量:第47行的C:\xampp\htdocs\My_Rss\classes\Rss.class.php中的详细信息
^
我已通过打印($result)确认$result是一个资源。结果是
资源id#6
新代码,新问题。“public function RSS()”应该是“public function.\uu construct()”。其次,代码中的行是否与RSS.class.php中的行完全匹配?错误似乎是说$details未定义,这显然是错误的。哪个粘贴行和错误行匹配?
$details='',就在while循环之前,是我在未定义变量错误之后添加的。但实际上while循环中的
$details
才是真正需要的。我已经按照你的建议再次编辑了代码。结果与前面的相同。我不明白为什么控件没有进入while循环。我
$query  = "SELECT * FROM FEED_DETAILS";  
$result = mysql_query ($query) or trigger_error(mysql_error()." ".$query);