Предупреждение: mysql_fetch_array(): предоставленный аргумент не является допустимым результатом MySQL
Я получаю ошибку при попытке выполнить это:
<?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() после строки, в которой вы запускаете свой запрос.
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
Эта ошибка означает, что ваш запрос не удался. mysql_query()
возвращает false, если произошла ошибка, вы затем передаете false в mysql_fetch_array()
, который вызывает сообщение об ошибке.
Ваш запрос может быть неудачным из-за отсутствия/неправильной таблицы или поля. Чтобы увидеть подробную ошибку, распечатайте результат mysql_error().
Библиотека mysql_*
устарела. Рекомендуется обновить до MySQLi
или PDO.
Ответ 3
// 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';
Вы имели в виду переназначить соединения vars? ИЛИ было, что несколько строк кода заглушки вы забыли вынести? Или просто пример, показывающий, какие параметры $содержат?
Ответ 4
Просьба сообщить об ошибке из mysql_error(). Без этого я могу только догадываться... попробуйте избежать имен ваших полей?
$result = $connector->query('SELECT `title`,`content` FROM `staff_vacancies` ORDER BY `ordering` LIMIT 0,100');
Ответ 5
В вашем запросе должна быть проблема, которая приводит к тому, что $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'];
}
}
?>
Ответ 6
Я нахожу это в сообщении, для меня решена моя проблема.
УОС.
Да, ответ прост, используемый запрос не является истинным результатом, так как это запрос внутри подстроки, так сказать.
Вот исправление:
Найдите все строки, которые выглядят так:
mysql_fetch_array(mysql_query("...snip...";-) );
И просто добавьте перед ним "@", чтобы он выглядел так:
@mysql_fetch_array(mysql_query("...snip...";-) );
Затем сделайте то же самое для следующих строк.
Код:
mysql_num_rows(mysql_query("...snip...";-) );
Выполните те же действия, что и выше, добавив к нему "@", чтобы он выглядел так:
@mysql_num_rows(mysql_query("...snip...";-) );
Все это говорит: "Выполняя xxx в течение yyy" В противном случае он мертв из-за отсутствия значения результата. Это вещь PHP..
Работает как прелесть, взял меня на 5 минут, чтобы разорвать весь код и похлопать все это в Modernbill, передает одну и ту же базу данных и отлично работает для меня.