5

Here is the code in question:

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

From 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;
}

Output:

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 Error Message

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /*path to*/DbConnector.php on line 50
2

3 Answers 3

5

Your problem is in fallowing line:

return mysql_query($query, $this->link) or die(mysql_error())

it should have been written like this:

$result = mysql_query($query, $this->link);
if(!$result) die(mysql_error());
return $result;

It is common in dynamic languages that or returns first object which evaluates to true, but in PHP the result of X or Y is always true or false.

Sign up to request clarification or add additional context in comments.

1 Comment

I just realized that when I echoed the mysql_error()... thanks people!
0

As you can learn from the manual, mysql_query return value type is not boolean but resource.
Something in your code converting it

4 Comments

i bet the link is valid and his db_select is failing?
mysql_db_select() gives bool(true) in var_dump, so it's not that.
@ Col. Shrapnel - what could convert query result to a boolean? I posted code for all the $result variable lifetime. BTW, query statement works in phpmyadmin and returns valid results.
@zlance4012 nobody question your query statement. I am talking of mysql_query function result
0

Agree with above, you have an issue with your mysql_query. It should never return True. Either false or a resource.

Refactor : mysql_query($query, $this->link) or die(mysql_error())

echo mysqlerror() after your query and see what the error message is. You probably do not have a valid connection.

2 Comments

@zlance4012 refactor it from silly childish die() to proper trigger_error()
For example : $dbconn = mysql_pconnect($myhost, $myuser, $mypass); if (!$dbconn) trigger_error('Database connection failure', E_USER_ERROR); When you use trigger_error, the error will be processed according to PHP's error handling routines.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.