Ajouter une colone dans une table, si elle n'existe pas

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Ajouter une colone dans une table, si elle n'existe pas

par supercanard » 27 janv. 2008, 22:59

Non, ce n'est pas mal.

Par contre [url=http://xn--or_die__outrance-3lb.saimal.fr/]or die à outrance, oui c'est mal[/url] ;)
Lol le lien
Sinon je savais pas :wink:

par Jules Petibidon » 27 janv. 2008, 22:22

Non, ce n'est pas mal.

Par contre [url=http://xn--or_die__outrance-3lb.saimal.fr/]or die à outrance, oui c'est mal[/url] ;)

par supercanard » 27 janv. 2008, 21:53

Non,

Pourquoi tu veux faire ça ?
Parce que sinon l'exécution du script s'arrête étant donné qu'il trouve la colonne en doublon. Alors que je veut pas qu'il s'arrête :roll:

@ h0_noMan

Effectivement mais ça ne résout pas le problème à la base en fait... :?

Quoi que je fasse après la requete, je ne peut e toute façon rien faire puisque OR DIE me stop tout. Et si je laisse ma requete sans OR DIE (mysql... etc, c'est mal... non ?

par h0_noMan » 27 janv. 2008, 21:20

mysql_query() returns a resource on success, or FALSE on error.
Il serait préferable de faire quelque chose dans ce genre.
$handle = mysql_query($req) ;

if($handle){
    // Traitement si la requete à reussi
}else{
    // Traitement si la requete à echoué
}

par Jules Petibidon » 27 janv. 2008, 21:17

Non,

Pourquoi tu veux faire ça ?

par supercanard » 27 janv. 2008, 21:12

Enleves ton OR DIE
On peut faire ça ? :
mysql_query($req) OR (mysql_errno()) ;

par h0_noMan » 27 janv. 2008, 21:07

die() est un alias de exit() donc si ta fonction echoue tu arreteras l'execution du code.

par Jules Petibidon » 27 janv. 2008, 21:01

Tu n'as pas lu ce que j'ai ecrit je crois :)

Le die() sert à identifier l'erreur. Une fois l'erreur identifiée, il n'est plus nécessaire.

Comme je te l'ai déja ecrit plus haut, une fonction genre mysql_* n'implique pas SYSTÉMATIQUEMENT un die().

par h0_noMan » 27 janv. 2008, 20:45

Enleves ton OR DIE

par supercanard » 27 janv. 2008, 20:23

Merci pour vos réponses.
Je crois avoir bien tout compris mais quelque chose cloche quand même dans mon histoire :
$req = "ALTER TABLE bloom_config ADD theme VARCHAR( 25 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL" ;
$sql = mysql_query($req) OR DIE (mysql_errno()) ;
echo 'rere';
Si la colonne existe voilà ce qui se passe : Pas d'erreur ou d'information , page blanche et le script s'arrête à la requete puisque mon echo ne s'exécute pas.
Impossible donc de faire par exemple ceci :
if( mysql_errno() == valeur ){
  // Suite du script
}
Le seul moyen d'obtenir le résultat voulu (continuation du script même si il y a doublon) est de ne pas mettre de or die... mais ce n'ets pas une bonne habitude à prendre me semble t-il :roll: [/php]

par Jules Petibidon » 27 janv. 2008, 19:53

Comme l'a dit Zeus, or die() n'est pas une erreur en soi. Croire qu'il faut systématiquement le mettre derriere un mysql_query (ou autre), par contre, en est une.

Dans ton cas justement il peut être intéressant, dans un premier temps

tu essaye ton script comme ceci ->
mysql_query( $truc ) or die( mysql_errno() );
Cela te donnera le code d'erreur généré par ta requête. Tu n'auras plus qu'a réécrire ton script comme ceci :
mysql_query( $truc );
if( mysql_errno() == valeur ){
   echo "Y'a doublon !";
}

par zeus » 27 janv. 2008, 19:11

le "or die()" n'est pas une erreur, mais ce n'est que le 1er pas de la gestion d'erreur.

Pour aller plus loin, il ne faudrait pas que tu arrêtes l'exécution de ton script, mais que tu interceptes l'erreur et que tu essayes de voir s'il s'agit d'une erreur controlée (colonne exisante) d'une erreur non controlée (tout le reste)

par supercanard » 27 janv. 2008, 19:01

Donc si j'ai bien compris ce n'est pas une erreur, au contraire, de ne pas mettre OR DIE ?

par Jules Petibidon » 27 janv. 2008, 18:00

Hello,

C'est le or die() qui est de la bidouille... On demande à un script de planter lorsqu'une requête plante au débugage, là dans ce cas on peut apparenter ça à une exception. Le retour d'erreur DUPLICATE est pas un plantage mais une information.

Ce genre de retour d'erreur ( mysql_errno() ) peut etre exploité dans la suite du script.

PS: Message ecrit, effacé et réécrit, du coup je suis sur d'être clair ;)

par h0_noMan » 27 janv. 2008, 17:52

Regardes du cote de SHOW COLUMNS