Salut à tous.

Voilà, je suis en train de passer à PDO sur mon dernier projet. J'ai une classe MySQL à l'origine que j'aimerais passer à 100% en PDO.

Voici ma classe remaniée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
 
<?php
 
class MySQL extends PDO {
 
	private $logins = array(
		'host'	=> 'host',
		'user'	=> 'rpgamer',
		'pass'	=> '1234',
		'bdd'	=> 'database'
	);
 
	// constructeur 
	public function __construct() {
 
		parent::__construct(
			"mysql:host=".$this->logins['host'].";dbname=".$this->logins['bdd'],
			$this->logins['user'], $this->logins['pass']
		);
	}
 
	// exécution de la requête
	public function query($query) {
 
		try {
 
			$result = $this->query($query);
			return $result;
		}
 
		catch (Exception $e) {
 
			error_log(SharedParking::$actual_page.' - '.$query.' : '.$e->getMessage(), 0);
			return FALSE;
		}
	}
 
	// exécution de la requête
	public function exec($query) {
 
		try {
 
			$result = $this->exec($query);
			return $result;
		}
 
		catch (Exception $e) {
 
			error_log(SharedParking::$actual_page.' - '.$query.' : '.$e->getMessage(), 0);
			return FALSE;
		}
	}
 
	// insertion de données dans MySQL
	public function insert($table, $values) {
 
		$values = array_map(array($this, 'quote'), (array)$values);	
		return $this->exec("INSERT INTO ".$this->quote($table)." VALUES('".implode("', '", $values)."')");
	}
 
	// sélection de données depuis MySQL
	public function select($table, $small_size = FALSE, $fields, $where = '', $order = '') {
 
		$result_size = !empty($small_size) ? 'SQL_SMALL_RESULT' : '';
		$where = !empty($where) ? ' WHERE '.$where : '';
 
		return $this->query("SELECT ".$result_size." ".implode(", ", (array)$fields)." FROM ".
		$this->quote($table).$where.$order);
	}
 
	// tri des résultat d'une requête SELECT
	public function order($fields, $order = 'ASC') {
 
		$order = array_map(array($this, 'quote'), (array)$order);
		if (count($fields) == count($order)) {
 
			$set = array();
			$fields = (array)$fields;
			for ($i = 0; $i < count($fields); $i++) {
 
				$set[] = $fields[$i].' '.$order[$i];
			}
 
			return " ORDER BY ".implode(", ", $set);
		}
 
		else {
 
			return FALSE;
		}
	}
 
	// limitation des résultats d'une requête SELECT
	public function limit($offset, $number) {
 
		if (is_numeric($offset) && is_numeric($number)) {
 
			return " LIMIT ".intval($offset).", ".intval($number);
		}
 
		else {
 
			return FALSE;
		}
	}
 
	// mis à jour de données de MySQL
	public function update($table, $values, $where = FALSE) {
 
		$set = array();
		foreach ((array)$values as $field => $value) {
 
			$set[] = $field." = ".$value;
		}
 
		return $this->exec("UPDATE ".$this->quote($table)." SET ".implode(", ", $set).(!empty($where) ? " WHERE ".$where : ''));
	}
 
	// suppression de données de MySQL
	public function delete($table, $where) {
 
		return $this->exec("DELETE FROM ".$this->quote($table)." WHERE ".$where);
	}
}
 
?>
Actuellement toutes les erreurs PHP sont journalisées dans un fichier. Si une erreur MySQL survient, je la capture et la journalise également.

En modifiant ma classe, j'ai bien sûr dû modifier la totalité de mon code, ce qui fait des milliers de lignes à corriger, je suis sûr de rencontrer au moins 1 erreur de syntaxe.

Mais je m'attendais pas à avoir chaque de mes pages totalement blanches et un fichier de journalisation totalement vide.

J'ai pensé à retirer le code capturant les erreurs retournées par les méthodes query() et exec() de la classe PDO, mais j'obtiens une erreur m'indiquant que la méthode fetch() n'est pas appelée sur un objet. Erreur correspondant à la première utilisation de l'instance.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
<?php
 
$mysql = new MySQL();
$result = $mysql->select('configuration', TRUE, '*', "conf_country = '".$sp->country."' && conf_lang = '".$sp->lang."'");
$conf = $result->fetch(PDO::FETCH_ASSOC);
 
?>
Je pense que le problème vient de la classe MySQL.
Merci d'avance de m'éclairer sur le sujet ^^