Я получаю ошибку при попытке запустить это:
<?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, делится той же базой данных и отлично работает для меня.