Предупреждение: mysql_fetch_array (): предоставленный аргумент не является допустимым результатом MySQL - PullRequest
40 голосов
/ 28 апреля 2009

Я получаю сообщение об ошибке при попытке запустить это:

<?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);
}


}
?>

Кто-нибудь знает в чем проблема?

Ответы [ 6 ]

17 голосов
/ 28 апреля 2009

В вашем запросе должна быть проблема, из-за которой $ result является недопустимым ресурсом.

Попробуйте проверить mysql_error () после строки, в которой вы выполняете запрос.

Edit:

На самом деле, я бы изменил ваш запрос функции класса DBConnector на что-то вроде следующего, чтобы при возникновении неверного запроса возникала идентифицируемая ошибка:

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 голосов
/ 01 октября 2015

Эта ошибка означает, что ваш запрос не выполнен. mysql_query() возвращает ложь, если произошла ошибка, затем вы передаете ложь на mysql_fetch_array(), который вызывает сообщение об ошибке.

Ваш запрос может быть неудачным из-за отсутствующей / неправильной таблицы или поля. Чтобы увидеть подробную ошибку, распечатайте результат mysql_error () .

Библиотека mysql_* устарела. Рекомендуется обновить до MySQLi или PDO.

1 голос
/ 19 мая 2015

Я нахожу это в посте, мне решили мою проблему. УОС.

Да, ответ прост, используемый запрос не является истинным результатом, так как это запрос внутри 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...";-) );

Все это говорит: «Делая ххх в ггг». В противном случае он мертв из-за отсутствия значения результата. Это вещь PHP ..

Работает как чудо, мне понадобилось 5 минут, чтобы разорвать весь код на части и поместить все это в Modernbill, разделяет ту же базу данных и отлично работает для меня.

1 голос
/ 28 апреля 2015

В вашем запросе должна быть проблема, из-за которой $ result является недопустимым ресурсом.

Используйте это

<?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

if($result){
while ($row = $connector->fetchArray($result)){

echo $row['title'].'</h3>';
echo $row['content'];
}
}
?>
1 голос
/ 29 апреля 2009

Пожалуйста, укажите ошибку от mysql_error (). Без этого я могу только догадываться ... попытаться экранировать имена ваших полей?

$result = $connector->query('SELECT `title`,`content` FROM `staff_vacancies` ORDER BY `ordering` LIMIT 0,100');
1 голос
/ 28 апреля 2009
// 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';

Вы хотели переназначить переменные соединения? ИЛИ это несколько строк кода заглушки, которые вы забыли вынести? Или просто пример, чтобы показать, что содержит $ settings?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...