auto increment

guy
Eléphant du PHP | 134 Messages

15 janv. 2007, 12:28

Bonjour
je cherche (en php pas via phpmyadmin) a recuperer la valeur de l'auto-increment d''une table et aussi la formule magique pour changer cet auto-increment!

Merci

Guy

ViPHP
ViPHP | 1961 Messages

15 janv. 2007, 12:33

Bonjour,

Regarde ce sujet
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

15 janv. 2007, 12:49

Si je puis me permettre, regarde bien toute la discussion.

Il y a un passage sur les dangers associées à changer un auto-increment ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

guy
Eléphant du PHP | 134 Messages

15 janv. 2007, 13:16

moi je ne desire pas effacer les enregistrement vide mais juste recuperer et modifier la valeur de l'auto-increment.
j'ai pondu ceci:
$sql = "SHOW TABLE STATUS LIKE '" . $tblpref ."facture'";
					$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
					$data = mysql_fetch_array($req);

 echo"$data[Auto_increment]"; 
pour recupere l'auto-increment et
$sql="alter table " . $tblpref ."facture AUTO_INCREMENT=$auto_icre";
	mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
apres avoir bien sur verifie que le nouveau auto-increment est superieur a l'ancien.
Ca marche mais j'espere que ca vas marcher dans tout les cas quel que soit le serveur et la version de mysql.


Guy

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

15 janv. 2007, 13:47

moi je ne desire pas effacer les enregistrement vide mais juste recuperer et modifier la valeur de l'auto-increment.
Peu importe... On ne touche JAMAIS à cette valeur !

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

ViPHP
ViPHP | 2144 Messages

15 janv. 2007, 14:09

Plus le temps passe, moins j'arrive à comprendre pourquoi des dévellopeurs veulent modifier cet auto-incrément ? C'est boite noire, le serveur garantit qu'il est unique et c'est tout ce qui nous intéresse. :lol:

Invité
Invité n'ayant pas de compte PHPfrance

15 janv. 2007, 15:14

dans mon cas l'auto-increment est le numero des facture (dans factux http://www.factux.org ) don je suis le devellopeur.
Pour des raison legales ou pratique il est necessaire de parfois changer le num des factures donc ici de l'auto-increment de la table facture.

Guy

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

15 janv. 2007, 15:17

Donc, tu n'as pas compris l'intérêt de l'auto-increment.

C'est juste une valeur qui permet d'identifier de manière unique une ligne en base de données.

Dans le cas des factures, comme le numéro d'une facture peut être modifié, il est primordiale que le numéro de la facture soit séparé de l'identifiant de la ligne.

Une fois, un prof m'a dit que personne ormis la base de données ne doit voir l'identifiant. Cela permet d'éviter ce genre d'erreur de conception toutefois basique. ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

guy
Eléphant du PHP | 134 Messages

15 janv. 2007, 15:18

Desolé j'ai oublie de me loguer . Par contre je me demande pourquoi il serait interdit et tabou de modifier l'auto-increment ? En prenant quelques precaution et en sachant les repercutions possible cela peut se faire sans danger je pense.

Guy

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

15 janv. 2007, 15:19

La contre-raison est simple : nul n'est infaillible.

1/ c'est très simple de ne pas penser à tous ;)
2/ Tu y penses aujourd'hui, mais lors de la prochaine évolution ?
3/ Il existe une manière de faire autrement sans prendre de risque, donc ...
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 2144 Messages

15 janv. 2007, 15:21

Une fois, un prof m'a dit que personne ormis la base de données ne doit voir l'identifiant.
Un sage, ton professeur =D> =D>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

15 janv. 2007, 15:22

Effectivement, un intervenant professionnel qui avait à faire tout les jours à des cas pratique.
En 5 interventions de 2 heures, j'en ai appris pas mal ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

15 janv. 2007, 15:30

Bon, faut pas pousser non plus, c'est pas interdit ou tabou de bricoler ton auto-increment (si c'était le cas, ils n'auraient pas offert la possibilité de le modifier dans le alter, c'est donc bien que ça sert, nottament pour synchroniser des tables), c'est juste que c'est assez dangereux pour un administrateur inexpérimenté.

Comme cela a été dit, l'intérêt de cette fonction est de te garantir l'unicité des valeurs que tu vas trouver. Elle a été testé, blindé, kevlardé, elle resiste même aux explosions nucléaires (si si, mais comme le pc et le disque dur eux ne les supportent pas, on peut pas le vérifier... ;)). Bref, mettre les doigts dedans signifie que son fonctionnement ne te convient pas, et dès lors l'intégrité des données ne sera garanti que par tes soins (au fait, tu résistes aux bombes atomiques ? ;))

Et dès lors où son fonctionnement ne correspond pas à ce que tu attends, la question à se poser c'est "faut-il utiliser cette fonction ?". Elle est parfaite pour un identifiant, elle l'est beaucoup moins pour une valeur susceptible de changer. (Et utiliser une valeur susceptible de changer comme id est une très mauvaise idée : il va falloir la retrouver et la modifier dans toutes les tables ou elle est susceptible d'être utilisée, chose que tu ne pourras plus faire lorsque mysql gèrera correctement les fk)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

15 janv. 2007, 15:41

Certes, ce n'est pas interdit ...

Maintenant, s'il se trouve que toutes les lignes de facturations pointent sur cet identifiant, il faut bien penser que ces lignes ne sont intègrent pendant la modification.

Pour enfoncer le clou, ce n'est pas interdit de ne pas mettre en place un système de détection des erreurs (au minimum un or die() ) pourtant, on est tous d'accord sur son utilité ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer