Passed
Push — master ( acb42d...3c39f1 )
by Anthony
03:03
created

Database   A

Complexity

Total Complexity 17

Size/Duplication

Total Lines 123
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 17
c 2
b 0
f 0
lcom 1
cbo 2
dl 0
loc 123
rs 10

8 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 7 1
A getPdo() 0 8 2
A query() 0 11 2
A prepare() 0 7 2
B rechercherEgalite() 0 19 6
A TestTableExist() 0 10 2
A quote() 0 3 1
A lastInsertId() 0 3 1
1
<?php
2
	namespace core\database;
3
4
	use core\HTML\flashmessage\FlashMessage;
5
	use PDO;
6
7
	class Database {
8
		use Querybuilder;
9
10
		private $db_type;
11
		private $db_name;
12
		private $db_user;
13
		private $db_pass;
14
		private $db_host;
15
		private $dbc;
16
17
18
19
		//-------------------------- CONSTRUCTEUR ----------------------------------------------------------------------------//
20
		public function __construct($db_type, $db_name, $db_user, $db_pass, $db_host) {
21
			$this->db_type = $db_type;
22
			$this->db_name = $db_name;
23
			$this->db_user = $db_user;
24
			$this->db_pass = $db_pass;
25
			$this->db_host = $db_host;
26
		}
27
		//-------------------------- FIN CONSTRUCTEUR ----------------------------------------------------------------------------//
28
29
30
31
		//-------------------------- GETTER ----------------------------------------------------------------------------//
32
		/**
33
		 * function qui fait la connexion a la bdd ne peu etre appelee que dans la classe
34
		 * @return PDO
35
		 */
36
		private function getPdo() {
37
			if ($this->dbc === null) {
38
				$dbc = new PDO($this->db_type.':host='.$this->db_host.';dbname='.$this->db_name, $this->db_user, $this->db_pass);
39
				$dbc->exec("set names utf8");
40
				$this->dbc = $dbc;
41
			}
42
			return $this->dbc;
43
		}
44
		//-------------------------- FIN GETTER ----------------------------------------------------------------------------//
45
46
		//-------------------------- FUNCTION QUI FONT DES REQUETES SUR LA BDD --------------------------------------------//
47
		/**
48
		 * effectue une requete en selectr dans la BDD, si ok on renvoit les donnees sinon on renvoi une erreur
49
		 * @param $req
50
		 * @return array
51
		 */
52
		public function query($req) {
53
			$query = $this->getPdo()->query($req);
54
55
			if ($query) {
56
				$obj = $query->fetchAll(PDO::FETCH_OBJ);
57
				return $obj;
58
			}
59
			else {
60
				FlashMessage::setFlash("Une erreur est survenue en executant cette requette : ".$req);
61
			}
62
		}
63
64
		/**
65
		 * fonction qui prepare une requete et qui l'envoi, marche pour insert et update et delete
66
		 * @param $req -> la req a executer
67
		 * @param $value -> le ou les tableaux de valeurs
68
		 */
69
		public function prepare($req, $value) {
70
			$query = $this->getPdo()->prepare($req);
71
			//si on a plusieurs tableaux
72
			if (!$query->execute($value)) {
73
				FlashMessage::setFlash("Une erreur est survenue en executant cette requette : ".$req);
74
			}
75
		}
76
77
		/**
78
		 * pour savoir si une valeur sur un champ précis existe deja en bdd, renvoi true si vrai
79
		 * @param $table
80
		 * @param $champ
81
		 * @param $value
82
		 * @return boolean|null
83
		 */
84
		public function rechercherEgalite($table, $champ, $value, $id_table = null, $id = null) {
85
			if ($id == null) {
86
				$query = $this->getPdo()->query("SELECT COUNT($champ) as nb FROM $table WHERE $champ LIKE '$value'");
87
			}
88
			else {
89
				$query = $this->getPdo()->query("SELECT COUNT($champ) as nb FROM $table WHERE $champ LIKE '$value' AND $id_table != $id");
90
			}
91
92
			if (count($query) > 0) {
93
				foreach ($query as $obj) {
94
					$nb = $obj["nb"];
95
				}
96
97
				if ((isset($nb)) && ($nb != 0)) return true;
98
			}
99
			else {
100
				return false;
101
			}
102
		}
103
		//-------------------------- FIN FUNCTION QUI FONT DES REQUETES SUR LA BDD --------------------------------------------//
104
105
106
		/**
107
		 * tester si une table dans la base donnee existe
108
		 * @param string $table definit la table pour laquelle on doit tester l'existance
109
		 * @return boolean
110
		 */
111
		public function TestTableExist($table) {
112
			$query = $this->getPdo()->query("SHOW TABLES LIKE '$table'");
113
114
			if ($query->rowCount() > 0) {
115
				return true;
116
			}
117
			else {
118
				return false;
119
			}
120
		}
121
122
		public function quote($quote) {
123
			return $this->getPdo()->quote($quote);
124
		}
125
126
		public function lastInsertId() {
127
			return $this->getPdo()->lastInsertId();
128
		}
129
	}