09-04-2010, 11:32 PM
Sinon on peut définir une fonction qui ferme proprement de façon implicite, via register_shutdown_function ()
En passant, je vous mets une version allégée d'une classe que j'utilise depuis des années pour mes sites, qui a subit des mises à jour mineure mais qui mériterait un gros lifting pour la passer en PDO. Pensez à définir les constantes "SECURITE" (constante qui doit juste être définie, peu importe ce qu'il y a dedans), SQL_HOST, SQL_USER, SQL_PASS (pas besoin d'expliquer, non ?)
En passant, je vous mets une version allégée d'une classe que j'utilise depuis des années pour mes sites, qui a subit des mises à jour mineure mais qui mériterait un gros lifting pour la passer en PDO. Pensez à définir les constantes "SECURITE" (constante qui doit juste être définie, peu importe ce qu'il y a dedans), SQL_HOST, SQL_USER, SQL_PASS (pas besoin d'expliquer, non ?)
Code PHP :
<?php defined('SECURITE') OR die('Accès direct non autorisé');
class Db {
//Lien MySQL vers la base
private $link=NULL;
// Constructeur
function __construct () {
// Se connecter automatiquement à la base du site à l'instanciation de l'objet db
if (is_null ($this->link) || !is_resource ($this->link)) {
$this->connect ();
}
}
// Récupérer le lien MySQL vers la base du site
public function getLink () {
return (!is_null($this->link) && is_resource ($this->link)) ? $this->link : NULL;
}
// Se connecter à la base du site
public function connect () {
if (is_null($this->link) || !is_resource ($this->link)) {
$this->link = mysql_connect(SQL_HOST, SQL_USER, SQL_PASS);
}
if (!is_resource ($this->link))
exit (__FILE__."[".__LINE__."] : link n'est pas une resource.");
// Sélection de la base
mysql_select_db ($_SERVER['SQL_DB'], $this->link) or exit (mysql_error ($this->link));
register_shutdown_function (array ($this, "deconnect"));
}
// Se déconnecter de la base
public function deconnect () {
if (is_resource($this->link)) {
mysql_close ($this->link) or exit (mysql_error ($this->link));
}
}
// Requête
public function query ($query) {
// Inutile d'exécuter des requêtes vides...
if (empty ($query)) {
return NULL;
}
// SECURITE sur UPDATE et REPLACE : obligation d'avoir une clause "WHERE"
if (ereg("UPDATE|REPLACE", $query) && !ereg("WHERE", $query)) {
return NULL;
}
// Vérifier que le lien est bon
if (!is_resource ($this->link)) {
return NULL;
}
// Si toutes les vérifications sont OK
return mysql_query ($query, $this->link);
}
}
?>