Requete mysql simple avec sauvegarde

Soyez le premier à donner votre avis sur cette source.

Vue 6 860 fois - Téléchargée 466 fois

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

Ajouter un commentaire

Commentaires

Samiby
Messages postés
118
Date d'inscription
mercredi 26 novembre 2003
Statut
Membre
Dernière intervention
2 janvier 2006
-
J'ai oublié un détail:
"mysql_insert_id()" ne fonctionne pas vu que on a déjà déconnecté.
Quelqu'un a une idée ?
cs_mfaraday
Messages postés
144
Date d'inscription
vendredi 18 avril 2003
Statut
Membre
Dernière intervention
4 janvier 2010
-
Salut,

Pourquoi ne pas te déconnecter une fois le fichier rempli ? dans ce cas tu peux utiliser mysql_insert_id(). Je ne pense pas que cela soit préjudiciable au niveau temps déexécution ou au niveau ressource...

Max
Samiby
Messages postés
118
Date d'inscription
mercredi 26 novembre 2003
Statut
Membre
Dernière intervention
2 janvier 2006
-
L'intérêt est que chez certains hébergeurs, le nombre de connexions simultannées à la base de données est limité.
Mais c'est bon, j'ai trouvé et modifié le code en conséquence.
cs_tolu
Messages postés
4
Date d'inscription
mardi 4 novembre 2003
Statut
Membre
Dernière intervention
4 juin 2004
-
Merci bonne idée et utile donc 10/10
jackie0000
Messages postés
22
Date d'inscription
dimanche 24 juillet 2005
Statut
Membre
Dernière intervention
3 août 2009
-
assez utile comme fonction je la cherchait en fait
merci

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.