bear
bear

Reputation: 11615

Call to a member function real_escape_string() on a non-object

I'm getting this error:

Call to a member function real_escape_string() on a non-object

and here's $db

$db = new mysqli("127.0.0.1", "username", "password", "sch5400");

in code:

function readSession($sessionId) {
    global $db;
    $sessionId = session_id();
    // escape session ID
    $sessionId = $db->real_escape_string($sessionId);
    $time = time();
    $result = $db->query("SELECT sessiondata FROM sessions WHERE sessionid='$sessionId' AND expiry > $time");
    if ($result->num_rows > 0) {
        $row = $result->fetchRow();
        return $row['sessiondata'];
    }
    // return empty string
    return "";
    }

It appears on line 5, relative to code above. Didn't I instantiate $db?

Upvotes: 2

Views: 36555

Answers (3)

Brad Mace
Brad Mace

Reputation: 27886

You haven't initialized $db anywhere in the code that's shown, and from the error it sounds like it hasn't been initialized anywhere else (yet) either.

If you are initializing $db somewhere, make sure it's before readSession is called. Also check for an error message when you make the connection. It returns false on error, which is not an object.

from the PHP manual, you should using one of these error checking methods to ensure the connection is established successfully:

/*
 * This is the "official" OO way to do it,
 * BUT $connect_error was broken until PHP 5.2.9 and 5.3.0.
 */
if ($mysqli->connect_error) {
    die('Connect Error (' . $mysqli->connect_errno . ') '
            . $mysqli->connect_error);
}

/*
 * Use this instead of $connect_error if you need to ensure
 * compatibility with PHP versions prior to 5.2.9 and 5.3.0.
 */
if (mysqli_connect_error()) {
    die('Connect Error (' . mysqli_connect_errno() . ') '
            . mysqli_connect_error());
}

Upvotes: 1

zerkms
zerkms

Reputation: 254926

Probably the better solution would be to create a singleton function:

function get_my_db()
{
    static $db;

    if (!$db) {
        $db = new mysqli("127.0.0.1", "username", "password", "sch5400");
    }

    return $db;
}

and use it like

$db = get_my_db();

in every function that needs db instance.

Upvotes: 15

Craig White
Craig White

Reputation: 14002

There is also a global function that doesnt require a db reference.

$sessionId = mysql_real_escape_string($sessionId);

http://php.net/mysql_real_escape_string

Upvotes: -1

Related Questions