Requete mysql simple avec sauvegarde

Description

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' , '...' ) " ) );

Codes Sources

A voir également

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.