Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
629 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  fonction de detection si une base existe

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

fonction de detection si une base existe

n°659388
jokari34
Posté le 29-02-2004 à 17:17:19  profilanswer
 

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

mood
Publicité
Posté le 29-02-2004 à 17:17:19  profilanswer
 

n°659390
no_code
This Magic Moment ...
Posté le 29-02-2004 à 17:18:25  profilanswer
 

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


Message édité par no_code le 29-02-2004 à 17:38:48
n°659417
jokari34
Posté le 29-02-2004 à 17:41:40  profilanswer
 

marche pas

n°659552
mrbebert
Posté le 29-02-2004 à 19:47:01  profilanswer
 

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
n°659553
simogeo
j'ai jamais tué de chats, ...
Posté le 29-02-2004 à 19:48:30  profilanswer
 


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
n°659568
naceroth
Posté le 29-02-2004 à 20:11:33  profilanswer
 

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; :))

n°659832
Tentacle
Posté le 01-03-2004 à 09:11:36  profilanswer
 

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 .

n°660200
naceroth
Posté le 01-03-2004 à 17:22:17  profilanswer
 

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)

n°660416
jokari34
Posté le 01-03-2004 à 22:01:02  profilanswer
 

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

n°661234
naceroth
Posté le 02-03-2004 à 17:29:46  profilanswer
 

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
mood
Publicité
Posté le 02-03-2004 à 17:29:46  profilanswer
 

n°661314
jokari34
Posté le 02-03-2004 à 19:09:31  profilanswer
 

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
n°661331
mrbebert
Posté le 02-03-2004 à 19:20:52  profilanswer
 

Cette requête, elle est sur plusieurs lignes ?

n°661335
jokari34
Posté le 02-03-2004 à 19:22:48  profilanswer
 

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
n°661349
naceroth
Posté le 02-03-2004 à 19:32:55  profilanswer
 

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

n°661398
mrbebert
Posté le 02-03-2004 à 20:17:55  profilanswer
 

naceroth a écrit :

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

effectivement :jap:

n°661454
naceroth
Posté le 02-03-2004 à 20:58:28  profilanswer
 

mrbebert a écrit :

effectivement :jap:  


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

n°661512
jokari34
Posté le 02-03-2004 à 21:37:30  profilanswer
 

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

n°661518
naceroth
Posté le 02-03-2004 à 21:44:13  profilanswer
 

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 :)

n°661519
mrbebert
Posté le 02-03-2004 à 21:44:35  profilanswer
 

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
n°661523
naceroth
Posté le 02-03-2004 à 21:53:59  profilanswer
 

fgets oui :)

n°661546
jokari34
Posté le 02-03-2004 à 22:13:39  profilanswer
 

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

n°661548
naceroth
Posté le 02-03-2004 à 22:17:10  profilanswer
 

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
n°661567
jokari34
Posté le 02-03-2004 à 22:45:07  profilanswer
 

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;"

n°661575
naceroth
Posté le 02-03-2004 à 23:05:12  profilanswer
 

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
n°661589
jokari34
Posté le 02-03-2004 à 23:25:14  profilanswer
 

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?

n°661592
naceroth
Posté le 02-03-2004 à 23:26:44  profilanswer
 

Arf, éditer trop tard :D

n°661595
jokari34
Posté le 02-03-2004 à 23:34:13  profilanswer
 

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

n°661597
jokari34
Posté le 02-03-2004 à 23:42:24  profilanswer
 

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 !!

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  fonction de detection si une base existe

 

Sujets relatifs
[PHP] Fonction inverse de nl2br ?comment appeler une fonction a partir d'un lien html ?
Pb avec fstream.h et ses fonction[MySQL] comment vérifier que la table existe déjà ?
lire dans la base du registre en C++Archivage automatique d'une base de donnée audio (radio)....
Remplir des champs d'un formulaire en fonction du choix dans une liste+1000 dans la base de donnée
Changer la taille d'importation du base de donnée SQL sous phpmyadmin[JS/PHP]Fonction isset de PHP en JS ?
Plus de sujets relatifs à : fonction de detection si une base existe


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR