Предупреждение: 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); } } ?> 

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

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

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

Редактировать:

Фактически, я бы изменил ваш запрос функции класса 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; } 

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

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

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

 // 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'; 

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

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

 $result = $connector->query('SELECT `title`,`content` FROM `staff_vacancies` ORDER BY `ordering` LIMIT 0,100'); 

У вашего запроса должна быть проблема, которая приводит к тому, что $ 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']; } } ?> 

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

Да, ответ прост, используемый запрос не является истинным результатом, так как это запрос внутри подстроки, так сказать. Вот исправление: найдите все строки, которые выглядят следующим образом:

 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, делится той же базой данных и отлично работает для меня.