Une classe Mysql, une de plus, mais qui présente, je crois, quelques nouveautés.
Je me suis inspiré d'une classe assez simple trouvée sur ce site : http://classes.scriptsphp.org/source.mysql
J'ai viré le "ramasse-mettes"/cache, qui réclame une autre classe, et j'ai ajouté 2 choses :
1) Un tableau qui contient toutes les requetes qu'on effectue, leur résultat, insert_id, etc.
2) Un systeme de "requete dynamique" qui n'est en fait qu'une utilisation de sprintf, avec un mysql_real_escape_string sur les chaines, et qui permet de réutiliser une requete en ne faisant varier que les variables.
Cette classe ne contient pas toutes les possibilités de mysql, mais seulement les plus utiles.
Je la teste depuis un moment, et tout fonctionne bien. Mais ce n'est pas une version définitive. J'y travaille sans cesse, corrige les quelques bogues qui surviennent quand je la pousse à fond.
La fonction de debugf est "assez lourde", un simple print_r suffirait sans doute.
Je la mettrai à jour régulièrement.
Mais je vous la présente car elle peut sans doute servir, mais surtout j'aimerai vos remarques et améliorartions possibles.
Utilisation
Cette classe gère donc une unique connexion.
La connexion se fait lors de la première requete à la base, et se ferme lors de la desctrution de l'objet (ou explicitement via la fonction close).
Chaque requete porte un nom (unique ou non), et est stoqué dans le tableau $tabreq par ce nom, qui sera un tableau (2eme dimension) contenant :
- query : la requete sql
- result_id : la ressource résultat
- error : l'erreur mysql_error
- insert_id : le dernier id généré (INSERT)
- dynquery : la requete dynamque
- dynvars : les variables dynamiques
Exemples
A noter pour ces exemple, qu'ils ne sont pas vraiment à suivre en fait car il vaut mieux de pas utiliser les variables $_POST directement dans la requete, mais plustot tester avant si elles sont viables (vides, erreur, etc.) ; mais ce sont de simples exemples...
Exemple 1
Exemple 2Je me suis inspiré d'une classe assez simple trouvée sur ce site : http://classes.scriptsphp.org/source.mysql
J'ai viré le "ramasse-mettes"/cache, qui réclame une autre classe, et j'ai ajouté 2 choses :
1) Un tableau qui contient toutes les requetes qu'on effectue, leur résultat, insert_id, etc.
2) Un systeme de "requete dynamique" qui n'est en fait qu'une utilisation de sprintf, avec un mysql_real_escape_string sur les chaines, et qui permet de réutiliser une requete en ne faisant varier que les variables.
Cette classe ne contient pas toutes les possibilités de mysql, mais seulement les plus utiles.
Je la teste depuis un moment, et tout fonctionne bien. Mais ce n'est pas une version définitive. J'y travaille sans cesse, corrige les quelques bogues qui surviennent quand je la pousse à fond.
La fonction de debugf est "assez lourde", un simple print_r suffirait sans doute.
Je la mettrai à jour régulièrement.
Mais je vous la présente car elle peut sans doute servir, mais surtout j'aimerai vos remarques et améliorartions possibles.
Utilisation
Cette classe gère donc une unique connexion.
La connexion se fait lors de la première requete à la base, et se ferme lors de la desctrution de l'objet (ou explicitement via la fonction close).
Chaque requete porte un nom (unique ou non), et est stoqué dans le tableau $tabreq par ce nom, qui sera un tableau (2eme dimension) contenant :
- query : la requete sql
- result_id : la ressource résultat
- error : l'erreur mysql_error
- insert_id : le dernier id généré (INSERT)
- dynquery : la requete dynamque
- dynvars : les variables dynamiques
Exemples
A noter pour ces exemple, qu'ils ne sont pas vraiment à suivre en fait car il vaut mieux de pas utiliser les variables $_POST directement dans la requete, mais plustot tester avant si elles sont viables (vides, erreur, etc.) ; mais ce sont de simples exemples...
Exemple 1
Code PHP :
<?php
// insertion classe, création de l'objet
include("class.mysql.php");
$bdd = new mysql('server', 'login', 'pass', 'base');
// (optionnel) je me connecte, en spécifiant une autre base
$bdd->connect('autre_base');
// --- une requete simple
$bdd->query('req_1', 'SELECT id, nom, ville FROM table');
// -- :respect:affiche les résultats dans une boucle, via un mysql_fetch_assoc (par défaut dans get_array())
while($data = $bdd->get_array('req_1')) {
echo $data['id'].' . '.data['nom'].' habite à '.data['ville'].'<br />';
}
// (optionnel) on déconnecte
$bdd->close();
Code PHP :
<?php
include("class.mysql.php");
$bdd = new mysql('server', 'login', 'pass', 'base');
// --- une requete dynamique simple, d'apres "ville_1" reçu dans un formulaire
$bdd->dynquery(
'req_1', // nom de la requete
"SELECT id, nom FROM table WHERE ville='%s'", // requete dynamique (format sprintf)
$_POST['ville_1'], // une seule variable, on la met direct
1 // on echappe les variables chaines (c notre cas) avec mysql_real_escape_string
);
// -- exploitation résultats
...
// -- on veut faire la meme requete, mais avec une autre ville (ville_2)
// on change uniquement la variable
$bdd->set_dynvars(
'req_1', // nom de la requete : le meme
$_POST['ville_2'] // une seule variable, on la met direct
);
// on réexécute la requete
$bdd->do_dynquery(
'req_1', // nom de la requete
1 // on echappe la variable puisque chaine (surtout d'un formulaire)
);
// -- exploitation resultats
...
// -- nb de requete dans le tableau (ici 1 seule)
echo 'On a utilisé '.$bdd->nb_req().' requète(s) différente(s)<br />';
// -- nb de requete exécutées (ici 2)
echo 'On a exécuté '.$bdd->$nb_req_sql.' requète(s)<br />';
// -- déboguage de la requete : affiche toutes les infos et l'éventuelle erreur sur cette requete
echo $bdd->debug('req_1').'<br />;
// -- affiche l'éventuelle erreur dnas une requete
// généralement mysql_error()
echo $bdd->get_error('req_1');
// -- affiche l'éventuelle erreur générale dans la classe
// par exemple exécution d'une requete qui n'existe pas, etc.
echo $bdd->get_error();