Welcome Guest, Not a member yet? Register   Sign In
how to manage DB connections
#1

(This post was last modified: 04-10-2025, 06:05 AM by PaulC.)

Hi If so how do  Team,
In my CI3 app I never worried about this because we autoloaded 'database' lib.
In CI4 it seems I now have to connect in my code - I have chosen the constructor of any Controller or Model where ever I need to access the database.
I am now aware that I could hit connection limits (currently 151 by default for mysql db)
A few (perhaps) obvious questions:
1) If I make a connection in a controller and the user session redirects to another controller will the $db persist for the session or do I open a second etc connection?
2) Should I check for an existing connection in each constructor and either proceed or open a new connection as appropriate? If so how please?
3) Another potential strategy would be to force a disconnect on completion of my db interation. If so how please?
4) I quite like the freeQuery() call. Is this recommended to optimise memory as lng as you don't need the cached result?
I have read the upgrade notes carefully but haven't found those nuggets yet.
Appreciate any thoughts and guidance.
TIA, Paul

Sorry typo in first line ...groan
Reply
#2

Hey Paul, in CI4, each request is fresh—DB connections don’t persist between controllers or sessions. Just use db_connect() and CI4 will reuse the same connection for that request. No need to manually check or close unless you're doing something heavy—then $db->close() helps. And yeah, freeResult() is good for saving memory if you don’t need the result anymore.
Reply
#3

Knowing if the data/state is ready is often not easy. Codeigniter 4 has an event system you could use, to trigger things when you want them: https://codeigniter4.github.io/userguide...vents.html
I reduced my db calls to the minimum using the resultArray to filter data usign lookup tables created with array_column or array_filter:

// Create a URI => ID mapping
$lookup = array_column($data, 'id', 'uri');
if (isset($lookup['/about'])) {
$id = $lookup['/about'];
echo $id;
}

or when you need all data:
$result = array_filter($data, function($item) use ($searchUri) {
return $item['uri'] === $searchUri;
});

if (!empty($result)) {
$id = reset($result)['id'];
echo $id; // Output: 2
}
good hunting!
Reply




Theme © iAndrew 2016 - Forum software by © MyBB