Bonjour, pour résumer ma situation : je suis en train de faire un projet dans lequel je dois pouvoir gérer les inscriptions à des évènements et pour afficher les évènements, j'ai fait une condition sur l'id et sur le nombre de lignes de mon tableau sql, mon problème est le suivant : quand je crée un évènement depuis mon site alors que j'en ai déjà supprimé d'autres, l'id ( un auto increment sql ) devient supérieur à l'ancien ( exemple j'ai supprimé l'event avec l'id 4, j'en crée un autre, le nouvel evenement aura l'id 5 ), j'ai donc cherché comment reset l'auto increment et j'ai trouvé ceci :
ALTER TABLE events AUTO_INCREMENT=1
que j'ai inséré dans le php de la manière suivante à la création de chaque évènement:
sachant que nbrlignes est bien sur la variable désignant le nombre de lignes qu'il y a actuellement dans ma bdd et que je veux donc que le prochain id soit égal par exemple à 5 si j'ai déjà 4 lignes correspondant chacune à un évènement; j'obtiens l'erreur suivante :
je comprends bien qu'il y a une erreur de rédaction mais je ne sais pas comment la régler, merci d'avance pour votre aide.
On voit qu'il n'aime pas les quotes ajoutées autour de la valeur, essaie de passer par PDOStatement::bindValue avec PDO::PARAM_INT en 3e paramètre pour faire ton bind.
Mais tu ne devrais pas toucher à l'auto-incrément, surtout avec le résultat d'un COUNT au lieu d'un MAX : si tu as des trous, ça ne fonctionnera pas !
On voit qu'il n'aime pas les quotes ajoutées autour de la valeur, essaie de passer par PDOStatement::bindValue avec PDO::PARAM_INT en 3e paramètre pour faire ton bind.
Mais tu ne devrais pas toucher à l'auto-incrément, surtout avec le résultat d'un COUNT au lieu d'un MAX : si tu as des trous, ça ne fonctionnera pas !
- Edité par julp il y a moins de 30s
Comment je peux faire alors pour afficher tous les évènements même avec des id qui partent dans tous les sens ? (= afficher tous les éléments de mon tableau sql ? ) je pourrais faire un SELECT sans WHERE mais je ne vois pas quoi faire ensuite
Il n'est pas nécessaire de corriger l'auto-incrément à chaque suppression, à part faire joli, ça ne sert pas à grand chose sinon te compliquer la tâche. La solution que tu tentes de mettre en place d'ailleurs n'est pas correcte : si tu as 3 lignes, mais que c'est la première qui a été supprimée, tu vas vouloir mettre 3 comme numéro d'auto-incrémentation, alors que celui-ci est déjà présent. Il faudrait donc choisir le maximum et ajouter 1, mais c'est là que tu vois que c'est pas possible de combler les "trous", parce que ça ne fonctionne bien que quand c'est le dernier enregistrement de la table que ça fait ce que tu veux…
Sinon, l'erreur, tu pourrais nous la fournir sous forme de texte (ce que c'est à la base) ? D'une part il me semble que c'est plus simple à copier-coller du texte qu'insérer une image, d'autre part si vous fournissez du texte en images, on devrait en appliquant la même logique vous fournir les partitions des musiques que vous voulez télécharger…
Edit
Le message était affiché comme ayant été posté il y a 20 minutes, mais je n'avais pas les réponses de julp
l'erreur en texte : Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe pr�s de ''4'' � la ligne 1 in E:\wamp\www\popup.php:25 Stack trace: #0 E:\wamp\www\popup.php(25): PDOStatement->execute(Array) #1 {main} thrown in E:\wamp\www\popup.php on line 25
En fait, si je veux changer l'id, c'est parceque mon code pour afficher les évènements est le suivant :
et donc ça ne marche que si les ID se suivent, sinon je ne vois peut-être pas comment faire alors que c'est évident, c'est la première fois que j'utilise et php et sql alors c'est envisageable !
Forcément : pourquoi tu boucles sur le contenu de ta table via un for et l'id ?!? Tu fais autant de requêtes (au lieu d'une seule) que tu as de lignes mais si tu as un "trou", ça va être faux ! C'est sûr que si l'approche de départ n'est vraiment pas bonne, tout ce qui va être construit autour ne va être que rustines (et encore je suis gentil)
Pourquoi tu ne fais pas comme tout le monde en parcourant directement tout le contenu de ta table :
$q = $db -> query('SELECT * FROM events /* ORDER BY ... */');
while ($nice = $q -> fetch()) {
// ton code HTML (les lignes 7 à 30 du code ci-dessus)
}
?
Ainsi, l'id n'a aucune importance (et ne devrait pas en avoir).
Très bien, c'est donc mes connaissances qui me faisaient défaut, merci pour ta réponse et bonne journée.
modifier l'auto increment sql depuis php
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli