Open only one DB connection per PHP call

This commit is contained in:
Némunaire 2015-01-18 06:52:17 +01:00 committed by Nemunaire
commit 7fc7a002e3
6 changed files with 34 additions and 84 deletions

View file

@ -4,7 +4,7 @@ if(!defined('ONYX')) exit;
function remove_themes($id) function remove_themes($id)
{ {
$db = new BDD(); global $db;
$res = $db->query("SELECT id FROM exercices WHERE id_theme = ".$id); $res = $db->query("SELECT id FROM exercices WHERE id_theme = ".$id);
foreach($res as $r) 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 exercices WHERE id_theme = ".$id);
$db->query("DELETE FROM themes WHERE id = ".$id); $db->query("DELETE FROM themes WHERE id = ".$id);
$db->deconnexion();
Cache::del("ordered_th".$id); Cache::del("ordered_th".$id);
} }
@ -33,14 +32,13 @@ if (!empty($_GET["delete"]))
} }
else if (isset($_GET["drop"])) else if (isset($_GET["drop"]))
{ {
$db = new BDD(); global $db;
$db->query("TRUNCATE exercice_files"); $db->query("TRUNCATE exercice_files");
$db->query("TRUNCATE exercice_keys"); $db->query("TRUNCATE exercice_keys");
$db->query("TRUNCATE exercice_tries"); $db->query("TRUNCATE exercice_tries");
$db->query("TRUNCATE exercices"); $db->query("TRUNCATE exercices");
$db->query("TRUNCATE themes"); $db->query("TRUNCATE themes");
$db->query("TRUNCATE solved"); $db->query("TRUNCATE solved");
$db->deconnexion();
header("Location: /".SALT_ADMIN."/themes"); header("Location: /".SALT_ADMIN."/themes");
exit; exit;

View file

@ -1,9 +1,6 @@
<?php <?php
if(!defined('ONYX')) exit; if(!defined('ONYX')) exit;
if (empty($sess->values["connected"]) && !defined("xCSRF"))
define("xCSRF", true);
// Enable debugging in development environment // Enable debugging in development environment
if (!empty($VAR["development"])) if (!empty($VAR["development"]))
define("DEBUG", true); define("DEBUG", true);
@ -30,3 +27,5 @@ if (!empty($VAR['misc_dir']))
$template->assign("MISC_DIR", $VAR['misc_dir']); $template->assign("MISC_DIR", $VAR['misc_dir']);
if (!empty($LANG)) if (!empty($LANG))
$template->assign("LANG", $LANG); $template->assign("LANG", $LANG);
$db = new BDD();

View file

@ -21,7 +21,7 @@ class Exercice
if (!empty($id)) if (!empty($id))
{ {
$db = new BDD(); global $db;
$db->escape($id); $db->escape($id);
$res = $db->unique_query("SELECT `id`, `id_theme`, `require`, `level`, $res = $db->unique_query("SELECT `id`, `id_theme`, `require`, `level`,
@ -49,8 +49,6 @@ class Exercice
FROM exercice_keys FROM exercice_keys
WHERE id_exercice = '$id'"); WHERE id_exercice = '$id'");
$db->deconnexion();
if (!empty($theme)) if (!empty($theme))
{ {
if ($res['id_theme'] == $theme->get_id()) if ($res['id_theme'] == $theme->get_id())
@ -72,7 +70,6 @@ class Exercice
} }
else else
{ {
$db->deconnexion();
throw new ExerciceNotFoundException(); throw new ExerciceNotFoundException();
} }
} }
@ -119,14 +116,12 @@ class Exercice
{ {
$id = $this->id; $id = $this->id;
$db = new BDD(); global $db;
$db->escape($id); $db->escape($id);
$res = $db->query("SELECT `id_team`, `time` FROM solved $res = $db->query("SELECT `id_team`, `time` FROM solved
WHERE id_exercice = '$id' WHERE id_exercice = '$id'
ORDER BY time"); ORDER BY time");
$db->deconnexion();
return $res; return $res;
} }
@ -137,12 +132,11 @@ class Exercice
$req = $this->require; $req = $this->require;
$db = new BDD(); global $db;
$db->escape($req); $db->escape($req);
$res = $db->unique_query("SELECT `id` FROM solved $res = $db->unique_query("SELECT `id` FROM solved
WHERE id_team = '".intval($team->id)."' WHERE id_team = '".intval($team->id)."'
AND id_exercice = '$req'"); AND id_exercice = '$req'");
$db->deconnexion();
if (empty($res)) if (empty($res))
return 0; return 0;
return 1; return 1;
@ -152,13 +146,11 @@ class Exercice
{ {
$id = $this->id; $id = $this->id;
$db = new BDD(); global $db;
$db->escape($id); $db->escape($id);
$res = $db->unique_query("SELECT `time` FROM solved WHERE id_exercice = '$id' $res = $db->unique_query("SELECT `time` FROM solved WHERE id_exercice = '$id'
AND id_team = ".intval($team->get_id())); AND id_team = ".intval($team->get_id()));
$db->deconnexion();
return $res["time"]; return $res["time"];
} }
@ -166,13 +158,11 @@ class Exercice
{ {
$id = $this->id; $id = $this->id;
$db = new BDD(); global $db;
$db->escape($id); $db->escape($id);
$res = $db->unique_query("SELECT `time` FROM exercice_tries WHERE id_exercice = '$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"); AND id_team = ".intval($team->get_id())." ORDER BY time DESC LIMIT 1");
$db->deconnexion();
if (!empty($res)) if (!empty($res))
return $res["time"]; return $res["time"];
else else
@ -185,7 +175,7 @@ class Exercice
$this->number = 1; $this->number = 1;
else else
{ {
$db = new BDD(); global $db;
$exo = $this->id; $exo = $this->id;
$ret = 0; $ret = 0;
@ -202,8 +192,6 @@ class Exercice
} while ($exo != "" && !in_array($exo, $checked)); } while ($exo != "" && !in_array($exo, $checked));
$this->number = $ret; $this->number = $ret;
$db->deconnexion();
} }
} }
@ -219,7 +207,7 @@ class Exercice
$files = $this->files; $files = $this->files;
$keys = $this->keys; $keys = $this->keys;
$db = new BDD(); global $db;
$db->escape($id); $db->escape($id);
$db->escape($theme); $db->escape($theme);
$db->escape($require); $db->escape($require);
@ -298,8 +286,6 @@ class Exercice
} }
} }
$db->deconnexion();
//FIXME //FIXME
return 1; return 1;
} }
@ -313,10 +299,9 @@ class Exercice
{ {
$id = $this->id; $id = $this->id;
$db = new BDD(); global $db;
$db->escape($id); $db->escape($id);
$db->query("DELETE FROM exercice_keys WHERE id_exercice = '$id'"); $db->query("DELETE FROM exercice_keys WHERE id_exercice = '$id'");
$db->deconnexion();
$this->keys = array(); $this->keys = array();
} }
@ -347,19 +332,17 @@ class Exercice
public static function get_nb_exo_max() public static function get_nb_exo_max()
{ {
$db = new BDD(); global $db;
$res = $db->unique_query("SELECT count(id) AS max FROM exercices $res = $db->unique_query("SELECT count(id) AS max FROM exercices
GROUP BY id_theme GROUP BY id_theme
ORDER BY max DESC ORDER BY max DESC
LIMIT 1"); LIMIT 1");
$db->deconnexion();
return $res['max']; return $res['max'];
} }
public function first_to_solve_exercice() public function first_to_solve_exercice()
{ {
$db = new BDD(); global $db;
$id = $this->id; $id = $this->id;
$db->escape($id); $db->escape($id);
@ -373,8 +356,6 @@ class Exercice
) AS t2 ) AS t2
INNER JOIN teams AS t3 ON t1.id_team = t3.id INNER JOIN teams AS t3 ON t1.id_team = t3.id
WHERE t1.time = t2.minTime"); WHERE t1.time = t2.minTime");
$db->deconnexion();
return $res['result']; return $res['result'];
} }

View file

@ -15,11 +15,9 @@ class Member
{ {
if (!empty($id)) if (!empty($id))
{ {
$db = new BDD(); global $db;
$res = $db->unique_query("SELECT id, id_team, firstname, lastname, nickname, company $res = $db->unique_query("SELECT id, id_team, firstname, lastname, nickname, company
FROM team_members WHERE id=" . intval($id)) or die($db->erreur()); FROM team_members WHERE id=" . intval($id)) or die($db->erreur());
$db->deconnexion();
if (!empty($res)) if (!empty($res))
{ {
$this->id = $res['id']; $this->id = $res['id'];
@ -47,7 +45,7 @@ class Member
else else
$id_team = $this->team->id; $id_team = $this->team->id;
$db = new BDD(); global $db;
$db->escape($firstname); $db->escape($firstname);
$db->escape($lastname); $db->escape($lastname);
$db->escape($nickname); $db->escape($nickname);
@ -67,7 +65,6 @@ class Member
WHERE id = ".intval($this->id)); WHERE id = ".intval($this->id));
$aff = $db->affected(); $aff = $db->affected();
} }
$db->deconnexion();
return ($aff == 1); return ($aff == 1);
} }

View file

@ -5,7 +5,7 @@ if(!defined('ONYX')) exit;
function cmp_team_pts($i1, $i2) function cmp_team_pts($i1, $i2)
{ {
if ($i1->get_pts() == $i2->get_pts()){ if ($i1->get_pts() == $i2->get_pts()){
$db = new BDD(); global $db;
$timestampi1 = $db->unique_query("SELECT MAX(s.time) AS maxTime $timestampi1 = $db->unique_query("SELECT MAX(s.time) AS maxTime
FROM solved AS s FROM solved AS s
@ -13,7 +13,6 @@ function cmp_team_pts($i1, $i2)
$timestampi2 = $db->unique_query("SELECT MAX(s.time) AS maxTime $timestampi2 = $db->unique_query("SELECT MAX(s.time) AS maxTime
FROM solved AS s FROM solved AS s
WHERE s.id_team = ".$i2->get_id()); WHERE s.id_team = ".$i2->get_id());
$db->deconnexion();
if (strtotime($timestampi1['maxTime']) > strtotime($timestampi2['maxTime'])) if (strtotime($timestampi1['maxTime']) > strtotime($timestampi2['maxTime']))
return 1; return 1;
@ -41,7 +40,7 @@ class Team
{ {
if (!empty($id)) if (!empty($id))
{ {
$db = new BDD(); global $db;
$res = $db->unique_query("SELECT `id`, `team_name`, `key_hash`, `slogan`, $res = $db->unique_query("SELECT `id`, `team_name`, `key_hash`, `slogan`,
`auth_level`, `revoked` `auth_level`, `revoked`
FROM teams WHERE id = ".intval($id)) or die($db->erreur()); FROM teams WHERE id = ".intval($id)) or die($db->erreur());
@ -55,7 +54,6 @@ class Team
$this->auth_level = $res['auth_level']; $this->auth_level = $res['auth_level'];
$this->revoked = $res['revoked']; $this->revoked = $res['revoked'];
} }
$db->deconnexion();
} }
} }
@ -84,7 +82,7 @@ class Team
$team_name = $this->team_name; $team_name = $this->team_name;
$revoked = $this->revoked; $revoked = $this->revoked;
$db = new BDD(); global $db;
$db->escape($key_hash); $db->escape($key_hash);
$db->escape($slogan); $db->escape($slogan);
$db->escape($team_name); $db->escape($team_name);
@ -106,7 +104,6 @@ class Team
WHERE id = ".intval($this->id)); WHERE id = ".intval($this->id));
$aff = $db->affected(); $aff = $db->affected();
} }
$db->deconnexion();
return ($aff == 1); return ($aff == 1);
} }
@ -114,13 +111,12 @@ class Team
// TODO: Drop members ? // TODO: Drop members ?
function drop() function drop()
{ {
$db = new BDD(); global $db;
if (!empty($this->id)) if (!empty($this->id))
$db->query("DELETE FROM teams WHERE id = ".intval($this->id)); $db->query("DELETE FROM teams WHERE id = ".intval($this->id));
$aff = $db->affected(); $aff = $db->affected();
if ($aff == 1) if ($aff == 1)
$this->id = 0; $this->id = 0;
$db->deconnexion();
return $aff; return $aff;
} }
@ -152,13 +148,11 @@ class Team
{ {
if(count($this->members) == 0) if(count($this->members) == 0)
{ {
$db = new BDD(); global $db;
$res = $db->query("SELECT `id` FROM team_members $res = $db->query("SELECT `id` FROM team_members
WHERE id_team = ".intval($this->id)); WHERE id_team = ".intval($this->id));
$db->deconnexion();
foreach($res as $member) foreach($res as $member)
$this->members[] = new Member($member["id"], $this); $this->members[] = new Member($member["id"], $this);
} }
@ -170,7 +164,7 @@ class Team
{ {
if(!isset($this->points)) 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 $res = $db->unique_query("SELECT E.id, S.id_team, SUM(E.points) as sum_points
FROM exercices E FROM exercices E
@ -178,8 +172,6 @@ class Team
WHERE S.id_team = ".$this->id." WHERE S.id_team = ".$this->id."
GROUP BY S.id_team"); GROUP BY S.id_team");
$db->deconnexion();
if (!empty($res)) if (!empty($res))
$this->points = $res['sum_points']; $this->points = $res['sum_points'];
else else
@ -191,10 +183,9 @@ class Team
function get_group_ids() function get_group_ids()
{ {
$db = new BDD(); global $db;
$res = $db->query("SELECT `id` FROM `users`"); $res = $db->query("SELECT `id` FROM `users`");
$db->deconnexion();
return $res['id']; return $res['id'];
} }
@ -213,13 +204,12 @@ class Team
function get_nb_res_exercises_by_theme($id_theme) 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 $res = $db->unique_query("SELECT E.id_theme AS theme, count(S.id) AS solved
FROM solved S FROM solved S
RIGHT OUTER JOIN exercices E ON E.id = S.id_exercice RIGHT OUTER JOIN exercices E ON E.id = S.id_exercice
AND S.id_team = ".$this->id." AND S.id_team = ".$this->id."
AND E.id_theme = ".$id_theme); AND E.id_theme = ".$id_theme);
$db->deconnexion();
return $res['solved']; return $res['solved'];
} }
@ -228,12 +218,11 @@ class Team
{ {
if ($id_theme != -1) if ($id_theme != -1)
{ {
$db = new BDD(); global $db;
$ids = $db->query("SELECT `id_theme`, `id_exercice` $ids = $db->query("SELECT `id_theme`, `id_exercice`
FROM solved S FROM solved S
LEFT OUTER JOIN exercices E ON S.id_exercice = E.id LEFT OUTER JOIN exercices E ON S.id_exercice = E.id
WHERE id_team =".$this->id." AND id_theme =".$id_theme); WHERE id_team =".$this->id." AND id_theme =".$id_theme);
$db->deconnexion();
$array = array(); $array = array();
$i = 0; $i = 0;
@ -251,28 +240,25 @@ class Team
// Static methods // Static methods
public static function set_revoked($bool, $name) public static function set_revoked($bool, $name)
{ {
$db = new BDD(); global $db;
$db->query("UPDATE teams SET revoked = ".intval($bool)." WHERE team_name = '".$name."'"); $db->query("UPDATE teams SET revoked = ".intval($bool)." WHERE team_name = '".$name."'");
$aff = $db->affected(); $aff = $db->affected();
$db->deconnexion();
return ($aff == 1); return ($aff == 1);
} }
public static function remove_team($id) 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 team_members WHERE id_team = ".$id);
$db->query("DELETE FROM solved WHERE id_team = ".$id); $db->query("DELETE FROM solved WHERE id_team = ".$id);
$db->query("DELETE FROM teams WHERE id = ".$id); $db->query("DELETE FROM teams WHERE id = ".$id);
$db->deconnexion();
} }
public static function get_teams() public static function get_teams()
{ {
$db = new BDD(); global $db;
$ids = $db->query("SELECT `id` FROM `teams`"); $ids = $db->query("SELECT `id` FROM `teams`");
$db->deconnexion();
$array = array(); $array = array();
if ($ids) if ($ids)
@ -302,9 +288,8 @@ class Team
public static function get_nb_teams() public static function get_nb_teams()
{ {
$db = new BDD(); global $db;
$res = $db->unique_query("SELECT COUNT(id) as count_teams FROM teams"); $res = $db->unique_query("SELECT COUNT(id) as count_teams FROM teams");
$db->deconnexion();
return $res['count_teams']; return $res['count_teams'];
} }

View file

@ -11,7 +11,7 @@ class Theme
{ {
if (!empty($id)) if (!empty($id))
{ {
$db = new BDD(); global $db;
$res = $db->unique_query("SELECT `id`, `name` $res = $db->unique_query("SELECT `id`, `name`
FROM themes WHERE id=" . intval($id)); FROM themes WHERE id=" . intval($id));
@ -21,11 +21,7 @@ class Theme
$this->name = $res['name']; $this->name = $res['name'];
} }
else else
{
$db->deconnexion();
throw new ThemeNotFoundException(); throw new ThemeNotFoundException();
}
$db->deconnexion();
} }
} }
@ -43,7 +39,7 @@ class Theme
{ {
$name = $this->name; $name = $this->name;
$db = new BDD(); global $db;
$db->escape($name); $db->escape($name);
if (empty($this->id)) if (empty($this->id))
@ -60,7 +56,6 @@ class Theme
WHERE id = ".intval($this->id)); WHERE id = ".intval($this->id));
$aff = $db->affected(); $aff = $db->affected();
} }
$db->deconnexion();
Cache::del("ordered_th".$this->id); Cache::del("ordered_th".$this->id);
@ -84,11 +79,10 @@ class Theme
function get_nb_exercices() function get_nb_exercices()
{ {
$db = new BDD(); global $db;
$res = $db->unique_query("SELECT count(id) as nb_exercices FROM exercices $res = $db->unique_query("SELECT count(id) as nb_exercices FROM exercices
WHERE id_theme = ".$this->id." WHERE id_theme = ".$this->id."
GROUP BY id_theme"); GROUP BY id_theme");
$db->deconnexion();
return $res['nb_exercices']; return $res['nb_exercices'];
} }
@ -109,13 +103,11 @@ class Theme
if (!empty($res)) if (!empty($res))
return $res; return $res;
$db = new BDD(); global $db;
$res = $db->query("SELECT E.id, E.require FROM exercices E $res = $db->query("SELECT E.id, E.require FROM exercices E
INNER JOIN themes T ON T.id = E.id_theme INNER JOIN themes T ON T.id = E.id_theme
WHERE T.id = ".intval($this->id)); WHERE T.id = ".intval($this->id));
$db->deconnexion();
$size = count($res); $size = count($res);
for ($i = 0; $i < $size; $i++) for ($i = 0; $i < $size; $i++)
@ -152,9 +144,8 @@ class Theme
public static function get_themes() public static function get_themes()
{ {
$db = new BDD(); global $db;
$ids = $db->query("SELECT `id` FROM `themes` ORDER BY `name`"); $ids = $db->query("SELECT `id` FROM `themes` ORDER BY `name`");
$db->deconnexion();
$array = array(); $array = array();
if ($ids) if ($ids)
@ -168,4 +159,3 @@ class Theme
class ThemeNotFoundException extends Exception class ThemeNotFoundException extends Exception
{ {
} }