Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result

Tags:

php

mysql

I get the error when trying to run this:

<?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'];
}
?>

I have a linked file: 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);
}


}
?>

Does anyone know what the problem is?

like image 747
user96828 Avatar asked Apr 28 '09 00:04

user96828


2 Answers

Your query must have a problem which is causing $result to be an invalid resource.

Try checking for mysql_error() after the line on which you run your query.

Edit:

In fact, I would alter your DBConnector class function query() to something like the following, so that an identifiable error is thrown when you have a bad query:

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;
}
like image 73
zombat Avatar answered Oct 07 '22 17:10

zombat


I find this in a post, to me solved my problem. Slds.

Yeah, Answer is simple, the query used is not a true result as it's a query inside of a getrow so to speak.. Here is the fix: Find all lines that look like this:

mysql_fetch_array(mysql_query("...snip...";-) );

And just add a "@" in front of it so it looks like this:

@mysql_fetch_array(mysql_query("...snip...";-) );

Then do the same thing for the following lines.. Code:

mysql_num_rows(mysql_query("...snip...";-) );

Perform the same steps as above by adding the "@" to it so it looks like this:

@mysql_num_rows(mysql_query("...snip...";-) );

All this does it say "While doing xxx within yyy" Otherwise, it's dead due to missing result value. It's a PHP thing..

Works like a charm, took me 5 mins to rip the whole code apart and slap it all into Modernbill, Shares the same database and works perfectly for me.

like image 34
Bladimir Ramirez Avatar answered Oct 07 '22 19:10

Bladimir Ramirez