fonction de detection si une base existe

fonction de detection si une base existe - PHP - Programmation

Marsh Posté le 29-02-2004 à 17:17:19    

existe til une syntaxe PHP pour detecter si une base ou une table existe?
 
merci

Reply

Marsh Posté le 29-02-2004 à 17:17:19   

Reply

Marsh Posté le 29-02-2004 à 17:18:25    

pour une table, "if exists nom_de_table" en sql .


Message édité par no_code le 29-02-2004 à 17:38:48
Reply

Marsh Posté le 29-02-2004 à 17:41:40    

marche pas

Reply

Marsh Posté le 29-02-2004 à 19:47:01    

Tu peux afficher la liste des bases par un :
SHOW DATABASES
 
et les tables par un :
SHOW TABLES
 
(les résultats de ces requêtes se parcourent de la même manière qu'un SELECT)
 
(c'est du mysql :o )


Message édité par mrbebert le 29-02-2004 à 19:47:20
Reply

Marsh Posté le 29-02-2004 à 19:48:30    


je serai curieux de voir comment t'as fais, t'as l'air d'être un champion en plus d'être sur de toi [:mlc]


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 29-02-2004 à 20:11:33    

simogeo a écrit :


je serai curieux de voir comment t'as fais, t'as l'air d'être un champion en plus d'être sur de toi


 
Ben il a raison, tel quel if exists ne marche pas. (c'est un mot clé qui s'utilise en combinaison avec une autre instruction, pas toute seule, genre DROP TABLE IF EXISTS bidule; :))

Reply

Marsh Posté le 01-03-2004 à 09:11:36    

Tu peux aussi regarder la doc php à la page http://fr3.php.net/manual/fr/ref.mysql.php (c'est du mysql aussi ... c'est ce que tu utilises ? ) et voir les 2 fonctions mysql_list_dbs et mysql_list_tables qui s'utilise d'ailleurs comme pour un requête SELECT. Ca doit d'ailleurs revenir au même que ce qu'a dit mrbebert .

Reply

Marsh Posté le 01-03-2004 à 17:22:17    

Ya aussi la solution plus idiote : faire un select * from maTable et vérifier le code d'erreur si le query retourne false (1146 si ma mémoire est bonne pour une table qui n'existe pas)

Reply

Marsh Posté le 01-03-2004 à 22:01:02    

ben du coup je fé un "show tables" et "show databases" et dans la boucle mysql_fetch_assoc(), je compare les resultats avec ceux que je cherche. et ca marche super
merci pour vos reponses

Reply

Marsh Posté le 02-03-2004 à 17:29:46    

Mouais...
 

Code :
  1. function onError($error,$query){
  2. switch ($error){
  3.  case 1146 :
  4.   die("La requête $query concerne une table inexistante" );
  5.   break;
  6.   case 1049 :
  7.   die("La base $query n'existe pas" );
  8.   break;
  9.  default :
  10.   die();
  11. }
  12. }
  13. define('HOST','localhost');
  14. define('USER','...');
  15. define('PASSWORD','...');
  16. define('DB_NAME','...');
  17. mysql_connect(HOST,USER,PASSWORD);
  18. mysql_select_db(DB_NAME) or onError(mysql_errno(),DB_NAME);
  19. $query = 'select * from MaTable';
  20. $res = mysql_query($query) or onError(mysql_errno(),$query);


 
est quand même nettement plus propre (tu fais pas le test pour rien déjà...)


Message édité par naceroth le 02-03-2004 à 17:32:06
Reply

Marsh Posté le 02-03-2004 à 17:29:46   

Reply

Marsh Posté le 02-03-2004 à 19:09:31    

je conaissais pas define()
tien tant que ji pense g un dernier pb, qui sil etait resolu acheverait mon projet a 100%
 
j'ai un script qu fait:
 
$fichier_requete = "societe.sql";  
$ouvrir = fopen ($fichier_requete, "r" ); // ouvre le fichier en lecture seule
   
$contenu = fread ($ouvrir, filesize ($fichier_requete));  
$lecontenu=stripslashes($contenu);
$interro_creer_table=mysql_query($lecontenu);
 
if (!$interro_creer_table)
{    
   echo "Les tables n'ont pas pu être créée ".mysql_error()." ".mysql_errno();  
}
fclose($ouvrir);
 
le pb c que la requete ne marche pas. j'ai fait un echo de la variable "$lecontenu" et il affiche bien le contenu des instructions SQL du fichier sans les "\" mais ca marche pas qd meme. Et commepar hasard sous PhpMyAdmin ca marche si je colle toute les instructions affichées par le echo.
 
Peut etre ya til une technique?


Message édité par jokari34 le 02-03-2004 à 19:11:17
Reply

Marsh Posté le 02-03-2004 à 19:20:52    

Cette requête, elle est sur plusieurs lignes ?

Reply

Marsh Posté le 02-03-2004 à 19:22:48    

oui, le fichier societe.sql contient toutes les instructions SQL pour re créer ma base et ses tables


Message édité par jokari34 le 02-03-2004 à 19:23:59
Reply

Marsh Posté le 02-03-2004 à 19:32:55    

Je pense pas que mysql_query accepte plusieurs instructions dans la même requête

Reply

Marsh Posté le 02-03-2004 à 20:17:55    

naceroth a écrit :

Je pense pas que mysql_query accepte plusieurs instructions dans la même requête

effectivement :jap:

Reply

Marsh Posté le 02-03-2004 à 20:58:28    

mrbebert a écrit :

effectivement :jap:  


 
Oui, l'histoire du ; abordée ailleurs me le donnait à penser :)

Reply

Marsh Posté le 02-03-2004 à 21:37:30    

comment puis-je faire alors pour proceder a un mysql_query() avec plusieurs instructions?

Reply

Marsh Posté le 02-03-2004 à 21:44:13    

Ben, si le fichier sql est bien écrit, il y a une fin de ligne après chaque instruction. Donc, lecture ligne par ligne avec mysql_query entre chaque lecture :)

Reply

Marsh Posté le 02-03-2004 à 21:44:35    

Tu fais en sorte que chaque instruction soit sur une ligne, et tu parcours ton fichier texte ligne par ligne (avec fget je crois [:figti] ), en exécutant la requête à chaque fois :)
 
edit : grilled mais on est d'accord c'est le principal :sol:


Message édité par mrbebert le 02-03-2004 à 21:45:05
Reply

Marsh Posté le 02-03-2004 à 21:53:59    

fgets oui :)

Reply

Marsh Posté le 02-03-2004 à 22:13:39    

ca seré pas plus simple de faire lire le fichier juska rencontrer un ";", faire ne pause lecture, executer et puis reprendre apres le ";" ?

Reply

Marsh Posté le 02-03-2004 à 22:17:10    

Si ton fichier est bien concu (pas phpMyadmin ou autre), le ; se trouve juste devant la fin de ligne, qui est elle recherchée automatiquement par fgets :)
 
par défaut, fgets lit un fichier ligne par ligne, soit exactement ce qu'il te faut ici :)


Message édité par naceroth le 02-03-2004 à 22:18:15
Reply

Marsh Posté le 02-03-2004 à 22:45:07    

euuu il A été créé par MyAdmin arffff
mais dans mon fichier generé par ce dernier, ya toujours un ";" a la fin d'une instruction:
genre "create table(....) type=MYISAM;"

Reply

Marsh Posté le 02-03-2004 à 23:05:12    

ben dans ce cas, tu lis ligne par ligne et tu exécute la requete lorsque le dernier caractère est un ;.
 
exemple (fait en quatrième vitesse)

Code :
  1. <?php
  2. $fp = fopen('./localhost.sql','rb');
  3. $query = '';
  4. while ($content = fgets($fp)){
  5.     // si pas commentaire on ajoute
  6. if ($content{0} != '#'){
  7.  $query .= $content;
  8. }
  9.     // si fin requête on exécute
  10. if (substr($content,-3,1) == ';') {
  11.  mysql_query($query);
  12.  $query = '';
  13. }
  14. }
  15. ?>


 
La solution "lire tout puis diviser à chaque ;" est problèmatique si un point virgule apparait comme valeur d'un champs :))
 


Message édité par naceroth le 02-03-2004 à 23:25:36
Reply

Marsh Posté le 02-03-2004 à 23:25:14    

g modifié mon fichier en mettant chaque instruction sur 1 ligne et chacune finit par un ";"
 
g aussi supprimé tous les retours à la line après ma derniere instruction
 
et nivo script ca donne:
 
$ouvrir = fopen ("societe.sql", "r" );
   
while (!feof ($ouvrir))  
{
 $buffer = fgets($ouvrir);
 $syntaxe=stripslashes($buffer);
 echo "syntaxe: $syntaxe<br><br>";
   
 $interro_creer_table=mysql_query($syntaxe);
     
  if (!$interro_creer_table)
  { echo "Les tables n'ont pas pu être créée ".mysql_error()." ".mysql_errno(); }
   
}
 
fclose($ouvrir);
 
 
et pourtant MySQL trouve des probleme.
l'erreur retournée est 1064 et il me dit "Something is wrong in your syntax près de '; '".
donc apparemment c le ";" qui fé gene
 
mais si j'enleve le ";" comment il va passer a la ligne suivante? le retout a la ligne suffit?

Reply

Marsh Posté le 02-03-2004 à 23:26:44    

Arf, éditer trop tard :D

Reply

Marsh Posté le 02-03-2004 à 23:34:13    

wé ta raison c pas tres propres le coup du ";".
du coup g supprimé tous les ";"
et je laisse le soin a fgets de mettre dans $buffer l'instruction juska trouver un retour à la ligne
 
mais le pb c que avec la tech du retour à la ligne ca marche a moitié  
 
pfiouuuuuu
merci pour ton code

Reply

Marsh Posté le 02-03-2004 à 23:42:24    

ahhh g trouvé où été le pb:
yavé une requete "create" qui été sur la meme ligne qu'une autre requete "create". javé donc oublié de la metre à la ligne
 
ca marche comme sur des roulettes, et sans les ";"
 
Merci bcp !!

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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