Several mysqli queries with php singleton

Viewed 1202

I have a very common mysqli class to provide database connections for the rest of the application:

class IabDB extends mysqli {

private static $instance = null;
// db connection config vars
private $user = "xxx-lit";
private $pass = "xxx";
private $dbName = "xxx";
private $dbHost = "xxx";


private function __construct() {
    parent::__construct($this->dbHost, $this->user, $this->pass, $this->dbName);
    if (mysqli_connect_error()) {
        exit('Connect Error (' . mysqli_connect_errno() . ') '
                . mysqli_connect_error());
    } 
    mysqli_set_charset($this, "utf8");
}


public static function getInstance() {
    if (!self::$instance instanceof self) {
        self::$instance = new self;
    }
    return self::$instance;
}

In my model I retrive data like this which works nicely:

$db = IabDB::getInstance();
    $query = $db->query("SELECT status, username, email, id FROM " . $table);
    $items =  $query->fetch_all();

EDIT But when I try to get another instance for another query I get the error message: Call to a member function fetch_all() on null.

Believe me: I tried it back and forth. Both queries are valid and both return a result if only either one of them is used. Just for the sake of completeness here is the second one with the model around:

class Model {

    public static function getItems($table) {      
            $db = IabDB::getInstance();
            $query = $db->query("SELECT * FROM lit_veranstaltungen");
            $items = $query->fetch_all();
            $db->close();
            var_dump($items);

} }

So it seems the second connection is disturbed somehow!?

Bonus question: from my knowledge the obviously now mostly laughed upon singleton pattern seems to be of good use for this purpose?

Any help and optionions are greatly appreciated!

3 Answers
Related