exécution de scripts SQL depuis du code PHP

exécution de scripts SQL depuis du code PHP - PHP - Programmation

Marsh Posté le 24-05-2007 à 22:54:36    

Bonjour à tous !
 
Après recherche dans ce thread, je n'ai rien trouvé qui réponde à ma question. Si j'ai mal cherché, excusez-moi par avance  :)  
 
Mon problème est le suivant :
 
Dans mon appli PHP/MySQL, l'admin a accès à une fonction de sauvegarde locale de la base de données sous la forme d'un script SQL de type :
 

Code :
  1. INSERT INTO(...) VALUES(...);
  2. INSERT INTO(...) VALUES(...);
  3. INSERT INTO(...) VALUES(...);


 
Le script généré par ma fonction marche parfaitement (je l'ai testé dans la console MySQL) mais je n'arrive pas à l'exécuter depuis le code PHP : une erreur survient. Et pour cause, mysql_query() ne prend en argument que des requêtes sans leur point-virgule final. On ne peut donc exécuter qu'une seule requête par appel de cette fonction.  
Je n'ai pas trouvé dans la doc de fonction permettant d'exécuter un script entier.
 
Si quelqu'un peut m'aider sur ce coup, ce serait très sympa !
(et désolé si jamais cette question est triviale, je suis newbie en php/mysql  :sweat: )

Reply

Marsh Posté le 24-05-2007 à 22:54:36   

Reply

Marsh Posté le 24-05-2007 à 23:12:26    

la solutiuon est p-ê de les insérer dans un tableau associatif (ou non) en php pour les exécuter chacune ...
 
genre
du fichier "lambda :

Code :
  1. INSERT INTO(...) VALUES(...);
  2. INSERT INTO(...) VALUES(...);
  3. INSERT INTO(...) VALUES(...);


 
on récupère en php le contenu (fopen, fread, fclose) dans $requetes p.ex.
 
puis on "splitte" :

Code :
  1. $array_requetes = explode("\n",$requetes); // on a une requête mysql par "ligne" du tableau


 
enfin, on exécute :

Code :
  1. foreach($array_requetes as $req)
  2. {
  3.     mysql_query($req) or die($req."<br>\n".mysql_error());
  4. }


 
bien entendu, on peut ajouter l'affichage de l'erreur mysql ou non ...

Reply

Marsh Posté le 24-05-2007 à 23:16:41    

En outre, si tu te tappes un gros fichier en un coup, tu risques d'avoir un timeout arrêtant l'exécution de ton script (sauf si t'as viré ce timeout dans ta config).
Le mieux c'est vraiment de faire des opérations atomiques, petit à petit.


Message édité par CyberDenix le 24-05-2007 à 23:17:27

---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 25-05-2007 à 01:20:49    

Merci beaucoup du conseil (et de la rapidité :p) je vais procéder comme ça !

Reply

Marsh Posté le 25-05-2007 à 09:00:59    

ça serait plus propre et plus fiable d'utiliser l'utilitaire mysql avec un petit exec (si ton hebergeur le permet)

Reply

Marsh Posté le 01-03-2008 à 16:58:17    

Héhé
Perso je cherche à débugger un site car une page précise met des temps faramineux d'éxecution ces derniers temps (120 sec) sur mon blog et je n'ai aucune idée comment retracer ligne par ligne la ligne qui patauge ..
 
Bref pour sql, je crée  
$q[]="select from blabla";
puis mysql_query(end($q))
 
permettant de retracer toutes les commandes quand t'es méticuleux :D


---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Marsh Posté le 04-03-2008 à 23:16:06    

essaye avec microtime pour calculer le temps
 
t'as l'exemple sur la page d'aide de la fonction sur le site de php:
 
<?php
$time_start = microtime(true);
 
// Sleep for a while
usleep(100);
 
$time_end = microtime(true);
$time = $time_end - $time_start;
 
echo "Did nothing in $time seconds\n";
?>

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed