Tom's Guide > Forum > Programmation > [résolu]Vérifier existaence d'une clé primaire

[résolu]Vérifier existaence d'une clé primaire

Forum Programmation : [résolu]Vérifier existaence d'une clé primaire

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

salut, je voudrais, en php, voir si il existe une clé primaire définie dans une table mysql
je fais un describe matable mais ensuite je ne sais pas comment voir s'il y a une clé.
merci d'avance de votre aide


Message édité par mcpherson le 19-05-2009 à 16:55:41
------------------------------ "Parlons moins codons plus"
Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

Code :
  1. mysql> DESCRIBE *******;
  2. +------------+--------------+------+-----+---------+----------------+
  3. | Field      | Type        | Null | Key | Default | Extra          |
  4. +------------+--------------+------+-----+---------+----------------+
  5. | id        | int(11)      | NO  | PRI | NULL    | auto_increment |
  6. | ****      | varchar(255) | NO  |    |        |                |
  7. | **** | int(11)      | NO  |    |        |                |
  8. | *****    | varchar(10)  | NO  |    | offline |                |
  9. | ******    | binary(1)    | YES  |    | 0      |                |
  10. +------------+--------------+------+-----+---------+----------------+
  11. 5 rows in set (0.00 sec)



Le PRI signifie Primaire.

------------------------------ 20minutes.fr, l'information en continu.
Répondre à SiM07

merci beaucoup, si j'ai bien pigé voila :
$query1="DESCRIBE $nameTable";
$retour = mysql_query($query1) or die (mysql_error()."<br /><br />".$query1);
$cle_primaire = '';
while($donnees = mysql_fetch_array($retour))
{
if($donnees['key'] == 'PRI'){
$cle_primaire = $donnees['Field']; //Nom de la colonne
break;
}
}
if($cle_primaire!="" )
{
//ici il y a une clé primaire définie
}
else //ici pas de clé primaire

mais ça ne marche pas, j'ai essayé des affichages dans les if mais il ne trouve jamais de clé primaire alors que j'en ai mis en bdd, je tombe toujours dans le else


Message édité par mcpherson le 19-05-2009 à 16:39:12
------------------------------ "Parlons moins codons plus"
Répondre à mcpherson

Pour fair ese genre de chose il est préférable d'utiliser la base de donnée "information_shema" elle est fait pour ça.

fait un print_r de $donnees :

Code :
  1. echo "<pre>"; print_r($donnees);echo "</pre>";

------------------------------ 20minutes.fr, l'information en continu.
Répondre à SiM07

hé c'est super bien ce truc!!
voila le résultat

Code :
  1. Array
  2. (
  3.     [0] => pseudo
  4.     [Field] => pseudo
  5.     [1] => text
  6.     [Type] => text
  7.     [2] => NO
  8.     [Null] => NO
  9.     [3] => PRI
  10.     [Key] => PRI
  11.     [4] =>
  12.     [Default] =>
  13.     [5] =>
  14.     [Extra] =>
  15. )
  16. Array
  17. (
  18.     [0] => passe
  19.     [Field] => passe
  20.     [1] => text
  21.     [Type] => text
  22.     [2] => NO
  23.     [Null] => NO
  24.     [3] =>
  25.     [Key] =>
  26.     [4] =>
  27.     [Default] =>
  28.     [5] =>
  29.     [Extra] =>
  30. )
  31. Array
  32. (
  33.     [0] => ff
  34.     [Field] => ff
  35.     [1] => text
  36.     [Type] => text
  37.     [2] => NO
  38.     [Null] => NO
  39.     [3] =>
  40.     [Key] =>
  41.     [4] =>
  42.     [Default] =>
  43.     [5] =>
  44.     [Extra] =>
  45. )


donc pseudo est bien clé primaire, pourquoi il ne le trouve pas alors?

------------------------------ "Parlons moins codons plus"
Répondre à mcpherson

Donc c'est pas $donnees['key'] mais $donnees['Key'] ...

au passage, remplace mysql_fetch_array par mysql_fetch_assoc car tu éviteras d'avoir en double ton tableau $donnees (array est la fusion de assoc et row).

------------------------------ 20minutes.fr, l'information en continu.
Répondre à SiM07

Citation :

donc pseudo est bien clé primaire, pourquoi il ne le trouve pas alors?


parce que je n'ai pas mis une majuscule à 'key'.
quelle journée!
merci de ton aide

------------------------------ "Parlons moins codons plus"
Répondre à mcpherson

tu m'as devancé désolé!
ok pour la fonction

------------------------------ "Parlons moins codons plus"
Répondre à mcpherson

Au passage, je ne sais pas où tu vas héberger ton application, mais fait attention d'avoir le droit de faire des describe ... tu pourrais avoir des surprises.

------------------------------ 20minutes.fr, l'information en continu.
Répondre à SiM07

ça sera hébergé sur un serveur OVH, pourquoi?qu'est ce qu'elle a cette instruction describe de méchant?

------------------------------ "Parlons moins codons plus"
Répondre à mcpherson

Ca comment à être des droits un peu avancé.

Le top pour une appli c'est de laisser juste les droits CRUD Soit : Create, Read (ou Retrieve), Update et Delete (ou Destroy). [src : Wikipedia]. On évite ainsi tout problème de sécurité. On peut même imaginer n'avoir que des droits en lecture ...

Après un passage il semble que tous les utilisateurs aient le droit d'effectuer un DESCRIBE, mais c'est absurde de laisser son schéma aussi visible.

Si tu veux un peu plus d'info sur le sujet, va voir du coté de PHPMyAdmin dans "Privilège", tu veras que tu peux creer des utilisateurs avec des droits différents. On ne mettera par exemple jamais des droits d'administration à une application web. (enfin, on le fait quand on met PHPMyAdmin mais bon, on met pas les droits n'importent comment aux gens qui y ont accès).

------------------------------ 20minutes.fr, l'information en continu.
Répondre à SiM07

non mais l'application sera protégé par des sessions donc seul l'administrateur pourra faire ce genre de choses, les autres pouvant faire de la consultation

------------------------------ "Parlons moins codons plus"
Répondre à mcpherson
Tom's Guide > Forum > Programmation > [résolu]Vérifier existaence d'une clé primaire
Aller à :

Il y a 1438 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens