警告:mysql_fetch_array():提供的参数不是有效的 MySQL 结果

2022-08-30 11:44:31

我在尝试运行此命令时收到错误:

<?php
require_once('includes/DbConnector.php');
$connector = new DbConnector();
$result = $connector->query('SELECT title,content FROM staff_vacancies ORDER BY ordering LIMIT 0,100');
// Get an array containing the results.
// Loop for each item in that array
while ($row = $connector->fetchArray($result)){

echo $row['title'].'</h3>';
echo $row['content'];
}
?>

我有一个链接文件:DbConnector.php:

<?php
////////////////////////////////////////////////////////////////////////////////////////
// Class: DbConnector
// Purpose: Connect to a database, MySQL version
///////////////////////////////////////////////////////////////////////////////////////
require_once 'SystemComponent.php';

class DbConnector extends SystemComponent {

var $theQuery;
var $link;

//*** Function: DbConnector, Purpose: Connect to the database ***
function DbConnector(){

    // Load settings from parent class
    $settings = SystemComponent::getSettings();

    // Get the main settings from the array we just loaded
    $host = $settings['dbhost'];
    $db = $settings['dbname'];
    $user = $settings['dbusername'];
    $pass = $settings['dbpassword'];

    //the settings
    $host = 'localhost';
    $db = 'xxx';
    $user = 'xxx';
    $pass = 'xxx';

    // Connect to the database
    $this->link = mysql_connect($host, $user, $pass);
    mysql_select_db($db);
    register_shutdown_function(array(&$this, 'close'));

}

//*** Function: query, Purpose: Execute a database query ***
function query($query) {
    $this->theQuery = $query;
    return mysql_query($query, $this->link);
}

//*** Function: getQuery, Purpose: Returns the last database query, for debugging ***
function getQuery() {
    return $this->theQuery;
}

//*** Function: getNumRows, Purpose: Return row count, MySQL version ***
function getNumRows($result) {
    return mysql_num_rows($result);
}

//*** Function: fetchArray, Purpose: Get array of query results ***
function fetchArray($result) {
    return mysql_fetch_array($result);
}

//*** Function: close, Purpose: Close the connection ***
function close() {
    mysql_close($this->link);
}


}
?>

有谁知道问题是什么?


答案 1

您的查询必须存在导致$result无效资源的问题。

尝试在运行查询的行后检查mysql_error()。

编辑:

实际上,我会将 DBConnector 类函数 query() 更改为如下所示的内容,以便在查询错误时引发可识别的错误:

function query($query) {
    $this->theQuery = $query;
    $queryId = mysql_query($query,$this->link);
    if (! $queryId) {
        throw new Exception(mysql_error().".  Query was:\n\n".$query."\n\nError number: ".mysql_errno();
    }
    return $queryId;
}

答案 2

我在一篇文章中发现了这一点,对我来说解决了我的问题。Slds.

是的,答案很简单,使用的查询不是真正的结果,因为它是getrow内部的查询。修复程序如下:查找如下所示的所有行:

mysql_fetch_array(mysql_query("...snip...";-) );

只需在它前面添加一个“@”,它看起来像这样:

@mysql_fetch_array(mysql_query("...snip...";-) );

然后对以下行执行相同的操作。法典:

mysql_num_rows(mysql_query("...snip...";-) );

通过向其添加“@”来执行与上述相同的步骤,使其如下所示:

@mysql_num_rows(mysql_query("...snip...";-) );

所有这些都会说“在y内执行xxx时”否则,由于缺少结果值,它已死亡。这是一个PHP的事情。

像一个魅力一样工作,我花了5分钟把整个代码撕开,然后把它全部打到Modernbill中,共享相同的数据库,对我来说很完美。


推荐