Passed
Push — master ( 1d9b86...df2d47 )
by Anthony
02:56
created

Database::prepare()   B

Complexity

Conditions 6
Paths 6

Size

Total Lines 21
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 21
rs 8.7624
cc 6
eloc 11
nc 6
nop 2
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 (array_key_exists(0, $value)) {
73
				foreach ($value as $val) {
74
					if (!$query->execute($val)) {
75
						$err = true;
76
					}
77
				}
78
			}
79
			else {
80
				if (!$query->execute($value)) {
81
					$err = true;
82
				}
83
			}
84
85
			//si on a une erreur on renvoi un message
86
			if (isset($err)) {
87
				FlashMessage::setFlash("Une erreur est survenue en executant cette requette : ".$req);
88
			}
89
		}
90
91
		/**
92
		 * pour savoir si une valeur sur un champ précis existe deja en bdd, renvoi true si vrai
93
		 * @param $table
94
		 * @param $champ
95
		 * @param $value
96
		 * @return boolean|null
97
		 */
98
		public function rechercherEgalite($table, $champ, $value, $id_table = null, $id = null) {
99
			if ($id == null) {
100
				$query = $this->getPdo()->query("SELECT COUNT($champ) as nb FROM $table WHERE $champ LIKE '$value'");
101
			}
102
			else {
103
				$query = $this->getPdo()->query("SELECT COUNT($champ) as nb FROM $table WHERE $champ LIKE '$value' AND $id_table != $id");
104
			}
105
106
			if (count($query) > 0) {
107
				foreach ($query as $obj) {
108
					$nb = $obj["nb"];
109
				}
110
111
				if ((isset($nb)) && ($nb != 0)) return true;
112
			}
113
			else {
114
				return false;
115
			}
116
		}
117
		//-------------------------- FIN FUNCTION QUI FONT DES REQUETES SUR LA BDD --------------------------------------------//
118
119
120
		/**
121
		 * tester si une table dans la base donnee existe
122
		 * @param string $table definit la table pour laquelle on doit tester l'existance
123
		 * @return boolean
124
		 */
125
		public function TestTableExist($table) {
126
			$query = $this->getPdo()->query("SHOW TABLES LIKE '$table'");
127
128
			if ($query->rowCount() > 0) {
129
				return true;
130
			}
131
			else {
132
				return false;
133
			}
134
		}
135
136
		public function quote($quote) {
137
			return $this->getPdo()->quote($quote);
138
		}
139
140
		public function lastInsertId() {
141
			return $this->getPdo()->lastInsertId();
142
		}
143
	}