Bonjour,

J'ai créé une fonction dont la mission est de s'assurer qu'une connexion à la base de données est en cours et qui l'établit si ce n'est pas le cas. Cette fonction, je l'appelle avant chaque bloc prepare - bind_param éventuel - execute - free - close. Est-ce que cette manière de faire est pertinente, à votre avis ?
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
function dbconnect(){
	// Define connection as a static variable, to avoid connecting more than once 
    static $db;
 
	if (!isset($db)) {
		mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
		try{
			$db = new mysqli("localhost", USERNAME, PASSWORD, DATABASE); // sont des constantes définies plus haut
			$db->set_charset("utf8");
			$db->query("SET NAMES 'utf8'");
			$db->query("SET collation_connection = 'utf8_roman_ci';");
			$db->query("SET character_set_client=utf8");
			$db->query("SET character_set_connection=utf8");
			$db->query("SET character_set_results=utf8");
 
			date_default_timezone_set("Europe/Brussels");
		}
		catch(Exception $e) {
			echo json_encode(array(	"msg" => "Erreur système. Veuillez contacter le support.",
								   	"error" => $e->getMessage()
								  )
							);
			exit('Erreur système. Veuillez contacter le support.'); 
		}
	}
	return $db;
}
Ensuite, à chaque fois que je veux faire une requête, cela ressemble à ceci :
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
try{
		$db = dbconnect();	
		$query = $db->prepare($q);
		$query->bind_param("ss", $param1, $param2);
		if (!$query->execute()) throw new Exception("Execute error.");
		// Free result set
		$query->free(); 
$query->close();
}
	catch(Exception $e) {
		echo json_encode(array(	"msg" => "Erreur système. Veuillez contacter le support.",
								"error" => $e->getMessage()
							  )
						);
		exit('Erreur système. Veuillez contacter le support.'); 
	}
Cela me paraissait bien mais j'attrape parfois une erreur du type "Commands out of sync; you can't run this command now" sur la commande execute(). Pourquoi ???
Est-ce qu'il y a quelques chose qui n'est pas catholique dans ce que vous voyez ?

Merci pour votre aide...

T.