[PHP] Tester la présence d'une table dans une BDD

Tester la présence d'une table dans une BDD [PHP] - PHP - Programmation

Marsh Posté le 16-04-2006 à 19:35:57    

Bonjour,
 
Je possède un site sur lequel des internautes peuvent s'inscrire.
En bref, lors de l'inscription je crée automatiquement une table qui contiendra les infos sur l'internaute : j'utilise mysql_query("CREATE TABLE ...
Petit problème : quelquefois la table n'est pas créer et je ne sais pas pourquoi.
Pourriez-vous m'aider à résoudre mon problème?
 
Seconde solution : Connaissez-vous une commande permettant de tester la présence d'une table? Je n'aurais qu'à tester la présence de la table et si elle n'a pa été créer je répète mon script ou j'affiche un message d'erreur pour que l'internaute recommence l'inscription.
 
Merci de m'aider.


Message édité par channot77 le 16-04-2006 à 19:58:12
Reply

Marsh Posté le 16-04-2006 à 19:35:57   

Reply

Marsh Posté le 16-04-2006 à 20:01:51    

http://www.google.fr/search?q=mysq [...] r:official
>> http://builder.com.com/5100-6371-1045433.html
>> fnTableExists()
The fnTableExists() function determines whether a particular table exists within a specified database on your MySQL server. Again, you need to have a server name, user name and password.

Citation :

function fnTableExists($TableName) {
//Verifies that a MySQL table exists
if (!$oConn = @mysql_connect(“mysql.kaufman.net”, “guest”, “secretword”)) {
$bRetVal = FALSE;
} else {
$bRetVal = FALSE;
$result = mysql_list_tables('MyDatabase', $oConn);
while ($row=mysql_fetch_array($result, MYSQL_NUM)) {
if ($row[0] ==  $TableName)
$bRetVal = TRUE;
break;
}
mysql_free_result($result);
mysql_close($oConn);
}
return ($bRetVal);
}

Reply

Marsh Posté le 16-04-2006 à 20:15:27    

T'as pas un problème de logique là ? Une table par utilisateur ?? Faut UNE table pour tous tes utilisateurs

Reply

Marsh Posté le 16-04-2006 à 20:48:53    

gooopil a écrit :

T'as pas un problème de logique là ? Une table par utilisateur ?? Faut UNE table pour tous tes utilisateurs


 
1 membre peut comptabiliser jusqu'à 50 entrées en moyenne dans sa table par an.  
J'ai à l'heure actuelle 400 membres et 10 membres de plus par jour.
Si je met tout dans 1 seule table ça risque d'être le bordel et en plus beacoup de calculs sont effectués sur ces tables et ça risquerait de ralentir plus qu'autre chose je pense.

Reply

Marsh Posté le 16-04-2006 à 20:57:44    

channot77 a écrit :

1 membre peut comptabiliser jusqu'à 50 entrées en moyenne dans sa table par an.  
J'ai à l'heure actuelle 400 membres et 10 membres de plus par jour.
Si je met tout dans 1 seule table ça risque d'être le bordel et en plus beacoup de calculs sont effectués sur ces tables et ça risquerait de ralentir plus qu'autre chose je pense.


 
 :heink: Enfin justement une base de données c'est quand même fait pour stocker pas mal de données...pis 50entrées/an c'est pas excessif...c'est rien !
Une table par utilisateur c'est la première fois que je rencontre ça...mais peut être j'ai pas compris l'interet.
Tu as pas peur que ce soit plus le bordel en mettant une table par membre ?

Reply

Marsh Posté le 16-04-2006 à 20:59:26    

50*400 = 20.000
 
Bon ça va t'as encore de la marge avant d'avoir des soucis avec ta taille de ta table, quand t'aurais plusieurs millions de lignes ça sera peut être plus discutable :D

Reply

Marsh Posté le 16-04-2006 à 21:00:17    

Enfin je ne sais pas.
Faut-il mieux avoir 400 tables et de ne traiter qu'1 seule table à 50 entrées  
ou avoir 1 seule table et traiter 50 entrées parmis 400x50 entrées?
Moi j'ai fait ça pour que les opérations se fassent plus rapidement mais peut-être que je me trompe.

Reply

Marsh Posté le 16-04-2006 à 21:03:40    

FlorentP a écrit :

50*400 = 20.000
 
Bon ça va t'as encore de la marge avant d'avoir des soucis avec ta taille de ta table, quand t'aurais plusieurs millions de lignes ça sera peut être plus discutable :D


 
+1
 

channot77 a écrit :

Enfin je ne sais pas.
Faut-il mieux avoir 400 tables et de ne traiter qu'1 seule table à 50 entrées  
ou avoir 1 seule table et traiter 50 entrées parmis 400x50 entrées?
Moi j'ai fait ça pour que les opérations se fassent plus rapidement mais peut-être que je me trompe.


 
400 tables c'est vraiment le bordel quand même...C'est quoi tes opérations dessus ?

Reply

Marsh Posté le 16-04-2006 à 21:08:13    

channot77 a écrit :

Enfin je ne sais pas.
Faut-il mieux avoir 400 tables et de ne traiter qu'1 seule table à 50 entrées  
ou avoir 1 seule table et traiter 50 entrées parmis 400x50 entrées?
Moi j'ai fait ça pour que les opérations se fassent plus rapidement mais peut-être que je me trompe.


C'est mieux une seule table.
T'ajoutes une colonne pour identifier le client associé à chaque entrée (colonne que tu ajoute à ta primary key), et c'est bon au niveau perf :p

Reply

Marsh Posté le 16-04-2006 à 21:13:36    

C'est sûr que ça résoudrait mon problème.
J'avais fait ça au début mais c vrai que maintenant avec 400 membres ca commence à faire beaucoup de tables.
Jvai y penser.
 
Au niveau des index dans les tables vous pourriez m'expliquer vite fait le principe?
 
Merci

Reply

Marsh Posté le 16-04-2006 à 21:13:36   

Reply

Marsh Posté le 16-04-2006 à 21:15:49    

A quoi ressemble la structure de ta table de base ?

Reply

Marsh Posté le 16-04-2006 à 21:23:37    

La table permet d'enregistrer le palmarès d'un joueur de tennis.
Les champs sont : ID Type Lieu Date Resultat Points Defaite Adversaire Licence Classement IDClass Score etc...

Reply

Marsh Posté le 16-04-2006 à 21:26:35    

A priori t'as une primary key sur uniquement "ID" donc ?
 
Là tu rajoute un champs "IDinscrit" et tu étend ta primary key sur deux champs au lieu d'un seul, pour avoir "IDinscri,ID" comme clé

Reply

Marsh Posté le 16-04-2006 à 21:30:21    

OK merci jvai essayer ça!

Reply

Marsh Posté le 16-04-2006 à 22:54:29    


 
Sous mysql, y a beaucoup plus simple, tu fais un bête

Code :
  1. $req = mysql_query("select 1 from ta_table limit 1" );
  2. switch (mysql_errno($req)){
  3. case 0 : //aucune erreur
  4. case 1146 : //ta table n'existe pas
  5. ...
  6. } (et idem pour la version OO)


 

Reply

Marsh Posté le 17-04-2006 à 10:26:36    

channot77 a écrit :

La table permet d'enregistrer le palmarès d'un joueur de tennis.
Les champs sont : ID Type Lieu Date Resultat Points Defaite Adversaire Licence Classement IDClass Score etc...


a vue de nez, ta BDD est très mal construite.

Reply

Marsh Posté le 17-04-2006 à 20:40:45    

J'ai mis une primary key sur mon champs "membre" mais apparemment ça m'empeche de rentrer plusieurs lignes avec le même membre.  
J'en rentre 1 mais apres il ne veut plus que je rentre de nouvelle lignes pour ce membre.
Faut-il paramétré qqchose ou est-ce normal?  Que dois-je utiliser comme index dans mon cas?

Reply

Marsh Posté le 17-04-2006 à 20:44:07    

channot77 a écrit :

J'ai mis une primary key sur mon champs "membre" mais apparemment ça m'empeche de rentrer plusieurs lignes avec le même membre.  
J'en rentre 1 mais apres il ne veut plus que je rentre de nouvelle lignes pour ce membre.
Faut-il paramétré qqchose ou est-ce normal?  Que dois-je utiliser comme index dans mon cas?


 
C'est l'interet de la primary key...

Reply

Sujets relatifs:

Leave a Replay

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