Connaitre l'ID autoincrement AVANT l'enregistrement ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

13 avr. 2010, 17:12

Ce n'est pas de la jalousie. C'est juste que, comme je t'en avais déjà fait part, si tu faisais preuve de plus d'analyse des questions avant de répondre, et que tu prenais un peu plus de temps pour construire tes réponses (plus que 3 mots et un lien), je suis sûr que tes interventions seraient de qualités.

Mais là, on dirais que tu te dépêches de répondre à tout ce que tu peux, et tellement vite, que tu n'expliques rien, ou alors tu te contentes de jeter une solution, alors que nous sommes avant tout là pour aider à progresser, par pour cracher du code ;)
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

Eléphant du PHP | 422 Messages

29 avr. 2010, 16:24

Mais je suis partis sur l'affirmation très "didacticielle" de stealth35 et j'ai fait deux requetes : 1 pour l'insert et l'autre pour choper l'ID et la retravailler.
Je retiens néanmois la solution : mysql_last_id ... a tester.
donc il fait une requet avant cqfd

^^
toujours faire une recherche sur http://www.php.net et/ou sur http://www.google.fr :)
utiliser http://ideone.com/ pour vos codes :)

Lénawaii
Invité n'ayant pas de compte PHPfrance

30 juin 2011, 00:34

Voici le code qui pourrait t'aider mon ami :

$Q_C = sprintf("SHOW TABLE STATUS LIKE 'customers'");
$C = mysql_query($Q_C, $user) or die(mysql_error());
$id_custom = $row_C['Auto_increment'];

Eléphant du PHP | 171 Messages

30 juin 2011, 01:12

Bonjour,

Je désirerai savoir si il est possible de connaitre l'ID d'une table (qui est autoincrémentée) avant d'effectuer un insert into dans la table ?
Existe t'il une solution PHP qui permettent de connaître cette ID ?
La vraie question c'est pourquoi as-tu besoin de savoir cela ?

Car en imaginant que ce soit possible (ce qui n'est pas le cas), rien ne te garantirait qu'il ne se soit pas passé une insertion (sur une connexion concurrente) entre le moment où tu demandes le prochain id et le moment ou tu réalises finalement l'insert. Ce qui rendrait l'information inutile car intrinsèquement non fiable.

Selon ta réponse on va peut-être pouvoir t'orienter sur une autre technique, ou alors te réexpliquer les fondamentaux sur l'usage d'un id autoincrémenté ;)
Lors d'une transaction ne peut on pas verrouiller, ou plutôt la table n'est t'elle pas verrouillée pour éviter ce genre de problème ? Je ne suis pas sûr de ce que j'affirme mais il est possible aussi de les verrouiller sans transaction si celles ci sont en InnoDB ?

Edit : Je viens de voir que le sujet à subit un déterrement de Lénawaii. ^^
Le bon jugement s'apprend par l'expérience qui s'acquiert en partie par le mauvais jugement.

Lénawaii
Invité n'ayant pas de compte PHPfrance

30 juin 2011, 01:27

Coreection du code que j'ai mis plus haut pour que cela soit valide :

$Q_C = sprintf("SHOW TABLE STATUS LIKE 'customers'");
$C = mysql_query($Q_C, $user) or die(mysql_error());
$row_C = mysql_fetch_assoc($C);
$id_custom = $row_C['Auto_increment'];[/quote]

Lénawaii
Invité n'ayant pas de compte PHPfrance

30 juin 2011, 01:40

Ouais et en plus en une seule requête, ce n'est pas du grand art ça ???

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

30 juin 2011, 11:05

peut être aurait il était bien de préciser que customer c'est le nom de la table ?

d'ailleurs le sprintf, lui, n'a aucun intérêt :)

enfin bref un an après c'est surement pas utile ^^

@+
Il en faut peu pour être heureux ......