C'est une fonction "tout en un 1".
Il se connecte, effectue la/les requête(s), et se déconnecte, le tout avec gestion des erreurs.
Le but de se reconnecter à chaque groupe de requêtes et de se déconnecter est de limiter au maximum le temps de connexion (souvent, le nombre de connections simultanées est limité).
Il permet aussi de faire des sauvegardes. Il sauvegarde touts les requêtes "INSERT" et "UPDATE" dans un fichier texte. L'avantage est que s'il vous perdez votre base de données, vous avez juste à effectuer la totalité du fichier texte en requête (dans PHPMyAdmin, il y a une option pour ça).
Source / Exemple :
<?php
function query_db($query){
//On se connecte sur le serveur
$connect=mysql_connect('leserveur','lelogin','lemotdepasse') or die("Impossible de se connecter sur le serveur : \n<br>".mysql_errno()." : ".mysql_error()."\n<br>");
//On séléctionne la BDD
mysql_select_db('labase') or die("Impossible de se connecter à la base de données : \n<br>".mysql_errno()." : ".mysql_error()."\n<br>");
//Si on a un tableau avec plusieurs requêtes
if(is_array($query)){
//On effectue chaque requête
for( $i=0 ; $i < count($query) ; $i++ ){
$result[$i]=@mysql_query($query[$i]) or die ("Impossible d'effectuer la requête : \n<br>".mysql_errno()." : ".mysql_error()."\n<br>");
//Si la requête est d'un type "INSERT"
if(substr($query[$i],0,6)=="INSERT"){
//On enregistre la valeur AUTO_INCREMENT attribuée
$result[$i]=mysql_insert_id();
}
}
}//On effectues la requête
$result=mysql_query($query) or die ("Impossible d'effectuer la requête : \n<br>".mysql_errno()." : ".mysql_error()."\n<br>");
//Si la requête est d'un type "INSERT"
if(substr($query,0,6)=="INSERT"){
//On enregistre la valeur AUTO_INCREMENT attribuée
$result=mysql_insert_id();
}
//On se déconnecte
mysql_close($connect);
//Si ce n'est pas un tableau
if( !is_array($query)){
//Si la requête est une 'INSERT' ou une 'UPDATE'
if(substr($query,0,6)=="INSERT" or substr($query,0,6)=="UPDATE" or substr($query,0,6)=="DELETE"){
//Si le fichier de sauvegarde existe
if(file_exists("hist_req_mysql.txt")){
//On l'ouvre en se plaçant à la fin
$fp=fopen("hist_req_mysql.txt","a");
//Sinon
}else{
//On le crée
$fp=fopen("hist_req_mysql.txt","w");
}
//On y inscrit le texte
$text="$query".";\n";
fwrite($fp,$text);
//On ferme le fihier
fclose($fp);
//sinon (c'est un tableau)
} else {
for($i ; $i < count($query) ; $i++) {
//Si la requête est une 'INSERT' ou une 'UPDATE'
if(substr($query,0,6)=="INSERT" or substr($query,0,6)=="UPDATE" or substr($query,0,6)=="DELETE"){
//Si le fichier de sauvegarde existe
if(file_exists("hist_req_mysql.txt")){
//On l'ouvre en se plaçant à la fin
$fp=fopen("hist_req_mysql.txt","a");
//Sinon
}else{
//On le crée
$fp=fopen("hist_req_mysql.txt","w");
}
//On y inscrit le texte
$text="$query".";\n";
fwrite($fp,$text);
//On ferme le fihier
fclose($fp);
}
}
//on renvoie le résultat (tableau ou simple valeur)
return $result
}
?>
Conclusion :
Il ne vous reste plus qu'à changer les données de connexions.
Cette fonction se comporte comme mysql_query, vu que c'est ce qu'elle retourne.
Il ne faut pas oublier de mettre :
include 'fonctions.php'
sur chaque page qui en aura besoin.
Dernière MAJ (14/05/2004):
Possibilité d'effectuer plusieurs requêtes à la fois.
Il faut transmettre les requêtes par un tableau
ex: query_db( array("INSERT INTO x VALUES( 'y' ,'z' , '...' ) " , "INSERT INTO y VALUES ('28' , '29' , '30' , '...' ) " ) );
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.