Thank you for the elaborate post! All the information you’ve provided really helps paint a clear picture for me as to what’s going on. Also, you seem to have a pretty good understanding of what’s going on, which helps a lot.
I think I agree with the StackOverflow post you found. I didn’t know about the persistent option before, but it seems like it keeps the database connection alive even after the request ends.
If I understand correctly how this option is implemented and works with Apache (connections are held by Apache worker processes), I don’t think this option works well at all on our hosting, and may result in a large number of lingering database connections that never get used (but will still use your max_user_connections allocation).
So I think you should definitely turn the persistent connection option off. The ERR_TOO_MANY_REDIRECTS
is odd, but it may be unrelated and I think we’ll be able to figure it out.
Yes, I agree that this is not a particularly efficient way to create handle connections, because every instance of UserModel will establish a new database connection.
There are many different ways in which you can try to fix this problem. Using a Service Container is fancy but hard to implement. A simpler approach is to use the Singleton Pattern. Some consider it to be an antipattern, but I think it’s an appropriate amount of complexity for your use case.
You can create a Singleton like this:
If you turn your Database
class into a singleton, you could just replace the $this->db = new Database()
with $this->db = Database::getInstance()
, and easily reuse the same database connection for all models.