0

I am making my first steps in the OOP world - please bear with me.
I know that having many ongoing mySQL connections open at the same time can be fatal for performance, so it should be a good idea to make a database class that takes this into account.

Is $this->session->write(...); going to result in a new mySQL connection being opened each time? Or is that up to the "persistent connection" feature in mySQL?

Here's the code:

abstract class database {
    function __construct() {
       //mysql_connect()
    }
}

class session extends database {
    function write () {
       // mysql_query(--.)
    }
}

3 Answers 3

1

Is session handler some kind of specialized type of database? It is not, so don't use inheritance (a is a relationship). Session handler uses database so you should use composition (a has a relationship):

class Session {
    protected $db;

    public function __construct(DB $db) {
        $this->db = $db;
    } 

    public function write() {
        $this->db->query(...);
    }
}


$db = new DB(...);
$session = new Session($db);

Also, don't use mysql_*() functions. Use much more powerful PDO.


Returning to your question... mysql_connect() will be executed every time you create a new Database object. However in this case Session is an object of type Database so every time you write new Database() or new Session() the constructor is invoked, therefore mysql_connect() is invoked as well.

PS. mysql_connect() function won't create a new connection if specified connection already exists. Check 4th argument of this function to learn more.

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

3 Comments

Hi Crozin, is there a good way of doing like your example, but having the $db-variable in new Session($db); set once only in my code, so I do not need to load it into every class that's dependent on the database class each time? Great pic btw :)
Also - is this stackoverflow.com/questions/1716652/… also a solution to this? (Singleton pattern)
Singleton might seem to be a cool, fast solution but it's a horrible idea to use it here. Here, you're dealing with dependecny injection. If passing dependencies manually become irritable or illegible consider using DIC
1

mysql_query will create a new connection only if no previous mysql connection has been made. Otherwise, it will either use the connection you specify or the last connection opened with mysql_connect. http://php.net/manual/en/function.mysql-query.php

Comments

0

Why not

class database {
    function __construct() {
       //mysql_connect()
    }
    function write() {
       //query the DB
    }
}

I'm not sure of the syntax, I don't do OOP PHP. Anyway, in your structure above a new connection would be opened for each "session" instance so assuming you only create one instance of "session" you won't be openeing loads of database connections.

1 Comment

Hi Dai - so your example wouldn't open a new connetion for each time i need to call the write() method?

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.