From 7fc7a002e31062407ab9d76f2d6bf58ae353076b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?N=C3=A9munaire?= Date: Sun, 18 Jan 2015 06:52:17 +0100 Subject: [PATCH] Open only one DB connection per PHP call --- onyx/include/admin/list_themes.php | 6 ++-- onyx/include/common.php | 5 ++-- onyx/include/common/Exercice.class.php | 39 +++++++----------------- onyx/include/common/Member.class.php | 7 ++--- onyx/include/common/Team.class.php | 41 ++++++++------------------ onyx/include/common/Theme.class.php | 20 ++++--------- 6 files changed, 34 insertions(+), 84 deletions(-) diff --git a/onyx/include/admin/list_themes.php b/onyx/include/admin/list_themes.php index 54800012..aa487d71 100644 --- a/onyx/include/admin/list_themes.php +++ b/onyx/include/admin/list_themes.php @@ -4,7 +4,7 @@ if(!defined('ONYX')) exit; function remove_themes($id) { - $db = new BDD(); + global $db; $res = $db->query("SELECT id FROM exercices WHERE id_theme = ".$id); foreach($res as $r) { @@ -17,7 +17,6 @@ function remove_themes($id) $db->query("DELETE FROM exercices WHERE id_theme = ".$id); $db->query("DELETE FROM themes WHERE id = ".$id); - $db->deconnexion(); Cache::del("ordered_th".$id); } @@ -33,14 +32,13 @@ if (!empty($_GET["delete"])) } else if (isset($_GET["drop"])) { - $db = new BDD(); + global $db; $db->query("TRUNCATE exercice_files"); $db->query("TRUNCATE exercice_keys"); $db->query("TRUNCATE exercice_tries"); $db->query("TRUNCATE exercices"); $db->query("TRUNCATE themes"); $db->query("TRUNCATE solved"); - $db->deconnexion(); header("Location: /".SALT_ADMIN."/themes"); exit; diff --git a/onyx/include/common.php b/onyx/include/common.php index bd9326d8..4a266633 100644 --- a/onyx/include/common.php +++ b/onyx/include/common.php @@ -1,9 +1,6 @@ values["connected"]) && !defined("xCSRF")) - define("xCSRF", true); - // Enable debugging in development environment if (!empty($VAR["development"])) define("DEBUG", true); @@ -30,3 +27,5 @@ if (!empty($VAR['misc_dir'])) $template->assign("MISC_DIR", $VAR['misc_dir']); if (!empty($LANG)) $template->assign("LANG", $LANG); + +$db = new BDD(); diff --git a/onyx/include/common/Exercice.class.php b/onyx/include/common/Exercice.class.php index e924968e..b11daeb1 100644 --- a/onyx/include/common/Exercice.class.php +++ b/onyx/include/common/Exercice.class.php @@ -21,7 +21,7 @@ class Exercice if (!empty($id)) { - $db = new BDD(); + global $db; $db->escape($id); $res = $db->unique_query("SELECT `id`, `id_theme`, `require`, `level`, @@ -49,8 +49,6 @@ class Exercice FROM exercice_keys WHERE id_exercice = '$id'"); - $db->deconnexion(); - if (!empty($theme)) { if ($res['id_theme'] == $theme->get_id()) @@ -72,7 +70,6 @@ class Exercice } else { - $db->deconnexion(); throw new ExerciceNotFoundException(); } } @@ -119,14 +116,12 @@ class Exercice { $id = $this->id; - $db = new BDD(); + global $db; $db->escape($id); $res = $db->query("SELECT `id_team`, `time` FROM solved WHERE id_exercice = '$id' ORDER BY time"); - $db->deconnexion(); - return $res; } @@ -137,12 +132,11 @@ class Exercice $req = $this->require; - $db = new BDD(); + global $db; $db->escape($req); $res = $db->unique_query("SELECT `id` FROM solved WHERE id_team = '".intval($team->id)."' AND id_exercice = '$req'"); - $db->deconnexion(); if (empty($res)) return 0; return 1; @@ -152,13 +146,11 @@ class Exercice { $id = $this->id; - $db = new BDD(); + global $db; $db->escape($id); $res = $db->unique_query("SELECT `time` FROM solved WHERE id_exercice = '$id' AND id_team = ".intval($team->get_id())); - $db->deconnexion(); - return $res["time"]; } @@ -166,13 +158,11 @@ class Exercice { $id = $this->id; - $db = new BDD(); + global $db; $db->escape($id); $res = $db->unique_query("SELECT `time` FROM exercice_tries WHERE id_exercice = '$id' AND id_team = ".intval($team->get_id())." ORDER BY time DESC LIMIT 1"); - $db->deconnexion(); - if (!empty($res)) return $res["time"]; else @@ -185,7 +175,7 @@ class Exercice $this->number = 1; else { - $db = new BDD(); + global $db; $exo = $this->id; $ret = 0; @@ -202,8 +192,6 @@ class Exercice } while ($exo != "" && !in_array($exo, $checked)); $this->number = $ret; - - $db->deconnexion(); } } @@ -219,7 +207,7 @@ class Exercice $files = $this->files; $keys = $this->keys; - $db = new BDD(); + global $db; $db->escape($id); $db->escape($theme); $db->escape($require); @@ -298,8 +286,6 @@ class Exercice } } - $db->deconnexion(); - //FIXME return 1; } @@ -313,10 +299,9 @@ class Exercice { $id = $this->id; - $db = new BDD(); + global $db; $db->escape($id); $db->query("DELETE FROM exercice_keys WHERE id_exercice = '$id'"); - $db->deconnexion(); $this->keys = array(); } @@ -347,19 +332,17 @@ class Exercice public static function get_nb_exo_max() { - $db = new BDD(); + global $db; $res = $db->unique_query("SELECT count(id) AS max FROM exercices GROUP BY id_theme ORDER BY max DESC LIMIT 1"); - $db->deconnexion(); - return $res['max']; } public function first_to_solve_exercice() { - $db = new BDD(); + global $db; $id = $this->id; $db->escape($id); @@ -373,8 +356,6 @@ class Exercice ) AS t2 INNER JOIN teams AS t3 ON t1.id_team = t3.id WHERE t1.time = t2.minTime"); - $db->deconnexion(); - return $res['result']; } diff --git a/onyx/include/common/Member.class.php b/onyx/include/common/Member.class.php index 677b9c37..31802e88 100644 --- a/onyx/include/common/Member.class.php +++ b/onyx/include/common/Member.class.php @@ -15,11 +15,9 @@ class Member { if (!empty($id)) { - $db = new BDD(); + global $db; $res = $db->unique_query("SELECT id, id_team, firstname, lastname, nickname, company FROM team_members WHERE id=" . intval($id)) or die($db->erreur()); - $db->deconnexion(); - if (!empty($res)) { $this->id = $res['id']; @@ -47,7 +45,7 @@ class Member else $id_team = $this->team->id; - $db = new BDD(); + global $db; $db->escape($firstname); $db->escape($lastname); $db->escape($nickname); @@ -67,7 +65,6 @@ class Member WHERE id = ".intval($this->id)); $aff = $db->affected(); } - $db->deconnexion(); return ($aff == 1); } diff --git a/onyx/include/common/Team.class.php b/onyx/include/common/Team.class.php index 32cb0be2..b299cf03 100644 --- a/onyx/include/common/Team.class.php +++ b/onyx/include/common/Team.class.php @@ -5,7 +5,7 @@ if(!defined('ONYX')) exit; function cmp_team_pts($i1, $i2) { if ($i1->get_pts() == $i2->get_pts()){ - $db = new BDD(); + global $db; $timestampi1 = $db->unique_query("SELECT MAX(s.time) AS maxTime FROM solved AS s @@ -13,7 +13,6 @@ function cmp_team_pts($i1, $i2) $timestampi2 = $db->unique_query("SELECT MAX(s.time) AS maxTime FROM solved AS s WHERE s.id_team = ".$i2->get_id()); - $db->deconnexion(); if (strtotime($timestampi1['maxTime']) > strtotime($timestampi2['maxTime'])) return 1; @@ -41,7 +40,7 @@ class Team { if (!empty($id)) { - $db = new BDD(); + global $db; $res = $db->unique_query("SELECT `id`, `team_name`, `key_hash`, `slogan`, `auth_level`, `revoked` FROM teams WHERE id = ".intval($id)) or die($db->erreur()); @@ -55,7 +54,6 @@ class Team $this->auth_level = $res['auth_level']; $this->revoked = $res['revoked']; } - $db->deconnexion(); } } @@ -84,7 +82,7 @@ class Team $team_name = $this->team_name; $revoked = $this->revoked; - $db = new BDD(); + global $db; $db->escape($key_hash); $db->escape($slogan); $db->escape($team_name); @@ -106,7 +104,6 @@ class Team WHERE id = ".intval($this->id)); $aff = $db->affected(); } - $db->deconnexion(); return ($aff == 1); } @@ -114,13 +111,12 @@ class Team // TODO: Drop members ? function drop() { - $db = new BDD(); + global $db; if (!empty($this->id)) $db->query("DELETE FROM teams WHERE id = ".intval($this->id)); $aff = $db->affected(); if ($aff == 1) $this->id = 0; - $db->deconnexion(); return $aff; } @@ -152,13 +148,11 @@ class Team { if(count($this->members) == 0) { - $db = new BDD(); + global $db; $res = $db->query("SELECT `id` FROM team_members WHERE id_team = ".intval($this->id)); - $db->deconnexion(); - foreach($res as $member) $this->members[] = new Member($member["id"], $this); } @@ -170,7 +164,7 @@ class Team { if(!isset($this->points)) { - $db = new BDD(); + global $db; $res = $db->unique_query("SELECT E.id, S.id_team, SUM(E.points) as sum_points FROM exercices E @@ -178,8 +172,6 @@ class Team WHERE S.id_team = ".$this->id." GROUP BY S.id_team"); - $db->deconnexion(); - if (!empty($res)) $this->points = $res['sum_points']; else @@ -191,10 +183,9 @@ class Team function get_group_ids() { - $db = new BDD(); + global $db; $res = $db->query("SELECT `id` FROM `users`"); - $db->deconnexion(); return $res['id']; } @@ -213,13 +204,12 @@ class Team function get_nb_res_exercises_by_theme($id_theme) { - $db = new BDD(); + global $db; $res = $db->unique_query("SELECT E.id_theme AS theme, count(S.id) AS solved FROM solved S RIGHT OUTER JOIN exercices E ON E.id = S.id_exercice AND S.id_team = ".$this->id." AND E.id_theme = ".$id_theme); - $db->deconnexion(); return $res['solved']; } @@ -228,12 +218,11 @@ class Team { if ($id_theme != -1) { - $db = new BDD(); + global $db; $ids = $db->query("SELECT `id_theme`, `id_exercice` FROM solved S LEFT OUTER JOIN exercices E ON S.id_exercice = E.id WHERE id_team =".$this->id." AND id_theme =".$id_theme); - $db->deconnexion(); $array = array(); $i = 0; @@ -251,28 +240,25 @@ class Team // Static methods public static function set_revoked($bool, $name) { - $db = new BDD(); + global $db; $db->query("UPDATE teams SET revoked = ".intval($bool)." WHERE team_name = '".$name."'"); $aff = $db->affected(); - $db->deconnexion(); return ($aff == 1); } public static function remove_team($id) { - $db = new BDD(); + global $db; $db->query("DELETE FROM team_members WHERE id_team = ".$id); $db->query("DELETE FROM solved WHERE id_team = ".$id); $db->query("DELETE FROM teams WHERE id = ".$id); - $db->deconnexion(); } public static function get_teams() { - $db = new BDD(); + global $db; $ids = $db->query("SELECT `id` FROM `teams`"); - $db->deconnexion(); $array = array(); if ($ids) @@ -302,9 +288,8 @@ class Team public static function get_nb_teams() { - $db = new BDD(); + global $db; $res = $db->unique_query("SELECT COUNT(id) as count_teams FROM teams"); - $db->deconnexion(); return $res['count_teams']; } diff --git a/onyx/include/common/Theme.class.php b/onyx/include/common/Theme.class.php index 1d286add..8dc21d10 100644 --- a/onyx/include/common/Theme.class.php +++ b/onyx/include/common/Theme.class.php @@ -11,7 +11,7 @@ class Theme { if (!empty($id)) { - $db = new BDD(); + global $db; $res = $db->unique_query("SELECT `id`, `name` FROM themes WHERE id=" . intval($id)); @@ -21,11 +21,7 @@ class Theme $this->name = $res['name']; } else - { - $db->deconnexion(); throw new ThemeNotFoundException(); - } - $db->deconnexion(); } } @@ -43,7 +39,7 @@ class Theme { $name = $this->name; - $db = new BDD(); + global $db; $db->escape($name); if (empty($this->id)) @@ -60,7 +56,6 @@ class Theme WHERE id = ".intval($this->id)); $aff = $db->affected(); } - $db->deconnexion(); Cache::del("ordered_th".$this->id); @@ -84,11 +79,10 @@ class Theme function get_nb_exercices() { - $db = new BDD(); + global $db; $res = $db->unique_query("SELECT count(id) as nb_exercices FROM exercices WHERE id_theme = ".$this->id." GROUP BY id_theme"); - $db->deconnexion(); return $res['nb_exercices']; } @@ -109,13 +103,11 @@ class Theme if (!empty($res)) return $res; - $db = new BDD(); + global $db; $res = $db->query("SELECT E.id, E.require FROM exercices E INNER JOIN themes T ON T.id = E.id_theme WHERE T.id = ".intval($this->id)); - $db->deconnexion(); - $size = count($res); for ($i = 0; $i < $size; $i++) @@ -152,9 +144,8 @@ class Theme public static function get_themes() { - $db = new BDD(); + global $db; $ids = $db->query("SELECT `id` FROM `themes` ORDER BY `name`"); - $db->deconnexion(); $array = array(); if ($ids) @@ -168,4 +159,3 @@ class Theme class ThemeNotFoundException extends Exception { } -