diff --git a/mod/msearch.php b/mod/msearch.php index b02a036ae..14dfd1ef7 100644 --- a/mod/msearch.php +++ b/mod/msearch.php @@ -68,7 +68,7 @@ function msearch_post(App $a) $perpage ); - while($search_result = DBA::fetch($search_stmt)) { + while ($search_result = DBA::fetch($search_stmt)) { $results[] = [ 'name' => $search_result['name'], 'url' => DI::baseUrl() . '/profile/' . $search_result['nickname'], @@ -77,6 +77,8 @@ function msearch_post(App $a) ]; } + DBA::close($search_stmt); + $output = ['total' => $total, 'items_page' => $perpage, 'page' => $page, 'results' => $results]; echo json_encode($output); diff --git a/src/Core/Worker.php b/src/Core/Worker.php index 6fb8bd40f..24febf3bc 100644 --- a/src/Core/Worker.php +++ b/src/Core/Worker.php @@ -614,6 +614,7 @@ class Worker } } } + DBA::close($entries); } /** diff --git a/src/Database/Database.php b/src/Database/Database.php index f86f27996..db906bd01 100644 --- a/src/Database/Database.php +++ b/src/Database/Database.php @@ -57,6 +57,7 @@ class Database /** @var PDO|mysqli */ protected $connection; protected $driver; + private $emulate_prepares = false; private $error = false; private $errorno = 0; private $affected_rows = 0; @@ -130,6 +131,8 @@ class Database return false; } + $this->emulate_prepares = (bool)$this->configCache->get('database', 'emulate_prepares'); + if (class_exists('\PDO') && in_array('mysql', PDO::getAvailableDrivers())) { $this->driver = 'pdo'; $connect = "mysql:host=" . $server . ";dbname=" . $db; @@ -428,8 +431,10 @@ class Database { $offset = 0; foreach ($args AS $param => $value) { - if (is_int($args[$param]) || is_float($args[$param])) { + if (is_int($args[$param]) || is_float($args[$param]) || is_bool($args[$param])) { $replace = intval($args[$param]); + } elseif (is_null($args[$param])) { + $replace = 'NULL'; } else { $replace = "'" . $this->escape($args[$param]) . "'"; } @@ -515,8 +520,8 @@ class Database switch ($this->driver) { case 'pdo': // If there are no arguments we use "query" - if (count($args) == 0) { - if (!$retval = $this->connection->query($sql)) { + if ($this->emulate_prepares || count($args) == 0) { + if (!$retval = $this->connection->query($this->replaceParameters($sql, $args))) { $errorInfo = $this->connection->errorInfo(); $this->error = $errorInfo[2]; $this->errorno = $errorInfo[1]; @@ -562,7 +567,7 @@ class Database $can_be_prepared = in_array($command, ['select', 'update', 'insert', 'delete']); // The fallback routine is called as well when there are no arguments - if (!$can_be_prepared || (count($args) == 0)) { + if ($this->emulate_prepares || !$can_be_prepared || (count($args) == 0)) { $retval = $this->connection->query($this->replaceParameters($sql, $args)); if ($this->connection->errno) { $this->error = $this->connection->error; diff --git a/src/Model/Contact.php b/src/Model/Contact.php index 2435b54f9..becc80c0c 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -2057,6 +2057,7 @@ class Contact Worker::add(PRIORITY_HIGH, 'MergeContact', $first, $duplicate['id'], $uid); } + DBA::close($duplicates); Logger::info('Duplicates handled', ['uid' => $uid, 'nurl' => $nurl]); return true; } @@ -2732,6 +2733,7 @@ class Contact ); } } + DBA::close($contacts); } /** diff --git a/src/Model/GContact.php b/src/Model/GContact.php index 553976296..becfd61b0 100644 --- a/src/Model/GContact.php +++ b/src/Model/GContact.php @@ -113,6 +113,7 @@ class GContact $gcontacts[] = Contact::getDetailsByURL($result['nurl'], local_user()); } + DBA::close($results); return $gcontacts; } @@ -563,6 +564,7 @@ class GContact PortableContact::loadWorker(0, 0, 0, $base); } } + DBA::close($contacts); } /** diff --git a/src/Model/Process.php b/src/Model/Process.php index 265292968..18b5f785a 100644 --- a/src/Model/Process.php +++ b/src/Model/Process.php @@ -85,7 +85,7 @@ class Process self::deleteByPid($process['pid']); } } - + DBA::close($processes); DBA::commit(); } } diff --git a/src/Model/Search.php b/src/Model/Search.php index 9e00bbe30..ca8960ef3 100644 --- a/src/Model/Search.php +++ b/src/Model/Search.php @@ -44,7 +44,7 @@ class Search while ($term = DBA::fetch($termsStmt)) { $tags[] = trim($term['term'], '#'); } - + DBA::close($termsStmt); return $tags; } } diff --git a/src/Model/User.php b/src/Model/User.php index be71bcf64..89574e760 100644 --- a/src/Model/User.php +++ b/src/Model/User.php @@ -1298,6 +1298,7 @@ class User $statistics['active_users_monthly']++; } } + DBA::close($userStmt); return $statistics; } diff --git a/src/Model/UserItem.php b/src/Model/UserItem.php index f68b5aac8..74c5ac448 100644 --- a/src/Model/UserItem.php +++ b/src/Model/UserItem.php @@ -215,6 +215,7 @@ class UserItem return true; } } + DBA::close($tags); return false; } diff --git a/src/Module/Admin/DBSync.php b/src/Module/Admin/DBSync.php index 8892c2969..dd7febcc5 100644 --- a/src/Module/Admin/DBSync.php +++ b/src/Module/Admin/DBSync.php @@ -102,6 +102,7 @@ class DBSync extends BaseAdmin $failed[] = $upd; } } + DBA::close($configStmt); if (!count($failed)) { $o = Renderer::replaceMacros(Renderer::getMarkupTemplate('admin/dbsync/structure_check.tpl'), [ diff --git a/src/Module/Admin/Site.php b/src/Module/Admin/Site.php index cf3fee31b..f3086856b 100644 --- a/src/Module/Admin/Site.php +++ b/src/Module/Admin/Site.php @@ -121,6 +121,7 @@ class Site extends BaseAdmin while ($user = DBA::fetch($usersStmt)) { Worker::add(PRIORITY_HIGH, 'Notifier', Delivery::RELOCATION, $user['uid']); } + DBA::close($usersStmt); info("Relocation started. Could take a while to complete."); diff --git a/src/Module/Settings/Delegation.php b/src/Module/Settings/Delegation.php index e70dee890..e590d6ea7 100644 --- a/src/Module/Settings/Delegation.php +++ b/src/Module/Settings/Delegation.php @@ -125,6 +125,7 @@ class Delegation extends BaseSettings while ($contact = DBA::fetch($contacts)) { $nicknames[] = $contact['nick']; } + DBA::close($contacts); // get user records for all potential page delegates who are not already delegates or managers $potentialDelegateUsers = DBA::selectToArray('user', ['uid', 'username', 'nickname'], ['nickname' => $nicknames]); diff --git a/src/Protocol/ActivityPub/Transmitter.php b/src/Protocol/ActivityPub/Transmitter.php index 620894c75..fd91dca16 100644 --- a/src/Protocol/ActivityPub/Transmitter.php +++ b/src/Protocol/ActivityPub/Transmitter.php @@ -96,6 +96,7 @@ class Transmitter while ($contact = DBA::fetch($contacts)) { $list[] = $contact['url']; } + DBA::close($contacts); if (!empty($list)) { $data['next'] = DI::baseUrl() . '/followers/' . $owner['nickname'] . '?page=' . ($page + 1); @@ -145,6 +146,7 @@ class Transmitter while ($contact = DBA::fetch($contacts)) { $list[] = $contact['url']; } + DBA::close($contacts); if (!empty($list)) { $data['next'] = DI::baseUrl() . '/following/' . $owner['nickname'] . '?page=' . ($page + 1); diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index 2a7fcc466..a91c5cdf8 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -122,6 +122,7 @@ class Diaspora while ($server = DBA::fetch($servers)) { $serverlist[$server['url']] = $server['url']; } + DBA::close($servers); // All tags of the current post $tags = DBA::select('tag-view', ['name'], ['uri-id' => $parent['uri-id'], 'type' => Tag::HASHTAG]); @@ -138,6 +139,7 @@ class Diaspora while ($server = DBA::fetch($tagserver)) { $tagserverlist[] = $server['gserver-id']; } + DBA::close($tagserver); } // All adresses with the given id @@ -146,6 +148,7 @@ class Diaspora while ($server = DBA::fetch($servers)) { $serverlist[$server['url']] = $server['url']; } + DBA::close($servers); } } @@ -1718,6 +1721,7 @@ class Diaspora while ($contact = DBA::fetch($contacts)) { Contact::remove($contact["id"]); } + DBA::close($contacts); DBA::delete('gcontact', ['addr' => $author]); diff --git a/src/Worker/CronJobs.php b/src/Worker/CronJobs.php index 2a6c97e84..319a369d1 100644 --- a/src/Worker/CronJobs.php +++ b/src/Worker/CronJobs.php @@ -128,6 +128,7 @@ class CronJobs while ($user = DBA::fetch($users)) { User::remove($user['uid']); } + DBA::close($users); // delete user records for recently removed accounts $users = DBA::select('user', ['uid'], ["`account_removed` AND `account_expires_on` < UTC_TIMESTAMP() "]); @@ -140,6 +141,7 @@ class CronJobs DBA::delete('user', ['uid' => $user['uid']]); } + DBA::close($users); } /** diff --git a/src/Worker/UpdateGContacts.php b/src/Worker/UpdateGContacts.php index 80c0ef524..9d9519241 100644 --- a/src/Worker/UpdateGContacts.php +++ b/src/Worker/UpdateGContacts.php @@ -96,5 +96,6 @@ class UpdateGContacts return; } } + DBA::close($contacts); } } diff --git a/src/Worker/UpdateGServers.php b/src/Worker/UpdateGServers.php index 2200d02e9..5a4513846 100644 --- a/src/Worker/UpdateGServers.php +++ b/src/Worker/UpdateGServers.php @@ -52,5 +52,6 @@ class UpdateGServers return; } } + DBA::close($gservers); } }