HI,..i've been working on this simple project that i need to submit it tomorrow.
I really in rushing a little bit.

But while i working on this oop project, my program give the strange little fatal error about my query which is this

Fatal error: Call to a member function query() on a non-object in C:\xampp\htdocs\listnote\index.php on line 25


I really sure that i wrote everything down correctly already, so that i really dont understand why did this error appear :(

Below here are the code :

This is my database class which i name it db.php

?php
//my database class
class Db {

    // make sure we dont connnect database to every function
    public $mysql;

    function __contruct(){
        $this->mysql = new mysqli('localhost','root','password','db') or die ("problem");
    }
?>

and here is my main program, index.php

<div id="todo">
                  <?php
                  require 'db.php';
                  $db = new Db();
                  $query = "SELECT*FROM list";
                  $results = $mysql->query($query);

                  if($results->num_rows){
                      while($row = $results->fetch_object()) {
                          $title = $row->title;
                          $description = $row->description;
                          $id = $row->id;

                          //the rest of the code go here
                 
                  }
                  ?>
</div>

could anyone figure it out for me?i really desperate right now as i could not continue my work because of this just small error.

Thanks in advance.

Dani AI

Generated

That fatal error means you are calling a method on a variable that is not an object (usually null or undefined). In this thread there are two common causes: a typo in the constructor name prevents the connection from being created (__construct must be spelled exactly), and using a variable that does not exist in scope (e.g., $mysql->query(...) instead of referencing the connection on your $db instance). To surface the root cause faster, enable strict MySQLi reporting and PHP errors early: mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); error_reporting(E_ALL); ini_set('display_errors', 1); See mysqli driver report modes and error_reporting.

A small, safer pattern is to keep the connection private and expose a method that runs queries. This guards against accidental use of an uninitialized property and makes error handling consistent.

class Db {
    private $conn;
    public function __construct($host, $user, $pass, $db) {
        mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
        $this->conn = new mysqli($host, $user, $pass, $db);
        $this->conn->set_charset('utf8mb4');
    }
    public function query($sql) {
        return $this->conn->query($sql);
    }
}

Quick checklist: ensure __construct is spelled correctly (docs), the MySQLi extension is loaded (phpinfo), credentials are valid, and you reference the connection via your $db instance. For long-term maintainability consider prepared statements or PDO (PDO manual) and avoid die() in library code.

Recommended Answers

All 16 Replies

Test with this code:

<?php
//my database class
class Db {

    // make sure we dont connnect database to every function
    public $mysql;

    function __contruct(){
        $this->mysql = new mysqli('localhost','root','password','db');
        if (mysqli_connect_error()) {
            die('Connect Error (' . mysqli_connect_errno() . ') '
                    . mysqli_connect_error());
        }
    }
}


$db = new DB();
var_dump($db->mysql);
?>

Test with this code:

<?php
//my database class
class Db {

    // make sure we dont connnect database to every function
    public $mysql;

    function __contruct(){
        $this->mysql = new mysqli('localhost','root','password','db');
        if (mysqli_connect_error()) {
            die('Connect Error (' . mysqli_connect_errno() . ') '
                    . mysqli_connect_error());
        }
    }
}


$db = new DB();
var_dump($db->mysql);
?>

hurm...not working also..what change is only the error message which is this:


NULL
Fatal error: Call to a member function query() on a non-object in C:\xampp\htdocs\listnote\index.php on line 25


is this somehow something wrong with my php version?
i am running php version 5.3.0..

Test with this code:

<?php
//my database class
class Db {

    // make sure we dont connnect database to every function
    public $mysql;

    function __contruct(){
        $this->mysql = new mysqli('localhost','root','password','db');
        if (mysqli_connect_error()) {
            die('Connect Error (' . mysqli_connect_errno() . ') '
                    . mysqli_connect_error());
        }
    }
}


$db = new DB();
var_dump($db->mysql);
?>

hurm...not working also..what change is only the error message which is this:


NULL
Fatal error: Call to a member function query() on a non-object in C:\xampp\htdocs\listnote\index.php on line 25


is this somehow something wrong with my php version?
i am running php version 5.3.0..

Check if you have the mysqli module installed (with phpinfo()) also check if you can actually connect to mysql with the given user/pass/database.

Yup:

http://www.php.net/manual/en/intro.mysqli.php

I think you can use the mysql extension in php 3.0 :

http://www.php.net/manual/en/book.mysql.php

em but somehow it is not about my php version or mysql version..
i am running php 5.3.0 and my mysql 5.1.37.

i am pretty sure that this code that i wrote is working just fine by using the php and mysql version lower than i have now.

but if this is not the problem..what else?please help..i really confuse and frustrated right now..

Check my last comment.

Check my last comment.

okies i run the phpinfo() but i dont know where to look

but here is some of the things from my phpinfo() :

MysqlI Support enabled
Client API library version 5.1.37
Active Persistent Links 0
Inactive Persistent Links 0
Active Links 36
Client API header version 5.1.37
MYSQLI_SOCKET MySQL

Directive-----------------------Local Value------Master Value
mysqli.allow_local_infile---------On On
mysqli.allow_persistent-----------On On
mysqli.default_host------ no value no value
mysqli.default_port 3306 3306
mysqli.default_pw no value no value
mysqli.default_socket MySQL MySQL
mysqli.default_user no value no value
mysqli.max_links Unlimited Unlimited
mysqli.max_persistent Unlimited Unlimited
mysqli.reconnect Off Off

is there something wrong?

No you have the extension. Did you try to login to the mysql server ?

ya i login to mysql server using the same user and password i wrote for the connection to the db..and everything is okay..

hurm..

could anyone try my code onto your computer and find out if the u got the same error?
i wonder if it is just me that having this problem..

Got it :)

__contrcuct() should be __construct()

oh wait actually my code for db.php is like this :

<?php
                  require 'db.php';
                  $db = new Db();
                  $query = "SELECT*FROM list ORDER BY id asc";
                  $results = $db->mysql->query($query);

                  if($results->num_rows){
                      while($row = $results->fetch_object()) {
                          $title = $row->title;
                          $description = $row->description;
                          $id = $row->id;
                         
                          //the rest of the code go here...
                      }
                  }
?>

Got it :)

__contrcuct() should be __construct()

hey........thank youuuu so much :D
i didnt realize that one is the problem.. >.<

hoho..must be really careful next time..
thanks again for ur time..

The error is in the db.php class:

<?php
//my database class
class Db {

    // make sure we dont connnect database to every function
    public $mysql;

    function __construct(){
        $this->mysql = new mysqli('localhost','root','password','db') or die ("problem");
    }
?>

Glad I could help

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.