Вот код, о котором идет речь:
Из index.php:
require_once('includes/DbConnector.php'); // Create an object (instance) of the DbConnector $connector = new DbConnector(); // Execute the query to retrieve articles $query1 = "SELECT id, title FROM articles ORDER BY id DESC LIMIT 0,5"; $result = $connector->query($query1); echo "vardump1:"; var_dump($result); echo "\n"; /*(!line 17!)*/ echo "Number of rows in the result of the query:".mysql_num_rows($result)."\n"; // Get an array containing the results. // Loop for each item in that array while ($row = $connector->fetchArray($result)){ echo '<p> <a href="viewArticle.php?id='.$row['id'].'">'; echo $row['title']; echo '</a> </p>';
От dbconnector.php:
$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']; // Connect to the database $this->link = mysql_connect($host, $user, $pass); mysql_select_db($db); register_shutdown_function(array(&$this, 'close')); } //end constructor //*** Function: query, Purpose: Execute a database query *** function query($query) { echo "Query Statement: ".$query."\n"; $this->theQuery = $query; return mysql_query($query, $this->link) or die(mysql_error()); } //*** Function: fetchArray, Purpose: Get array of query results *** function fetchArray($result) { echo "<|"; var_dump($result); echo "|> \n"; /*(!line 50!)*/$res= mysql_fetch_array($result) or die(mysql_error()); echo $res['id']."-".$res['title']."-".$res['imagelink']."-".$res['text']; return $res; }
Вывод:
Query Statement: SELECT id, title FROM articles ORDER BY id DESC LIMIT 0,5 vardump1:bool(true) PHP Error Message Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /*path to*/index.php on line 17 Number of rows in the result of the query: <|bool(true) |>
Сообщение об ошибке PHP
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /*path to*/DbConnector.php on line 50
Ваша проблема заключается в паре:
return mysql_query($query, $this->link) or die(mysql_error())
это должно было быть написано так:
$result = mysql_query($query, $this->link); if(!$result) die(mysql_error()); return $result;
В динамических языках это часто встречается or
возвращает первый object
который оценивает значение true, но в PHP результат X or Y
всегда является истинным или ложным .
Как вы можете узнать из руководства, тип возвращаемого значения mysql_query не является логическим, а ресурсом.
Что-то в коде конвертирует его
Согласитесь с выше, у вас есть проблема с вашим mysql_query. Он никогда не должен возвращать Истину. Либо ложь, либо ресурс.
Рефакторинг: mysql_query ($ query, $ this-> link) или die (mysql_error ())
echo mysqlerror () после вашего запроса и посмотреть, что такое сообщение об ошибке. У вас, вероятно, нет действительного соединения.