Passage Mysql 4 vers Mysql 5

Administrateur PHPfrance
Administrateur PHPfrance | 977 Messages

23 juin 2006, 10:42

Bonjour,

j'ai une requête sql

Code : Tout sélectionner

INSERT INTO user(id_user,id_groupe_user,login_user,passwd_user,prenom,nom,email,en_ligne,language) VALUES ('','1','admin','3902adc1e543ec9a103f3363f54bbb','Olivier','LE CORRE','[email protected]','1','fr')


qui fonctionne sous Mysql 4, or la base de données vient de passer sous Mysql 5 et la requête ne fonctionne plus

Code : Tout sélectionner

Erreur: (1264) Out of range value adjusted for column 'id_user' at row 1
Diffile de me tapper toutes l'applications pour rendre les requetes compatibles, comment faire marcher cette requete sous mysql 5 ?

la conf de mysql 5 est celle par défaut
pro : http://www.ohweb.fr -> studio de développement en PHP, expertise en e-commerce, certifié PrestaShop
perso : http://www.olecorre.com -> un dico de termes informatiques

J'ai toujours rêvé d'un ordinateur qui soit aussi facile à utiliser qu'un téléphone. Mon rêve s'est réalisé : je ne sais plus comment utiliser mon téléphone. [Bjarne Stroustrup]

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

23 juin 2006, 12:16

Il me semble que, sous MySQL 5, pour qu'un id soit rempli automatiquement, il ne faut pas le citer et il sera pris en charge automatiquement par le SGBD.

Code : Tout sélectionner

INSERT INTO user(id_groupe_user,login_user,passwd_user,prenom,nom,email,en_ligne,language) VALUES ('1','admin','3902adc1e543dee103f3363f54bbb','Olivier','LE CORRE','[email protected]','1','fr')
Sinon, ton message d'erreur me fait penser à celui qui est retourné quand une table est corrompue :-k

Est-ce que tu y accèdes en lecture ?
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

Administrateur PHPfrance
Administrateur PHPfrance | 977 Messages

23 juin 2006, 16:37

c'est pas un prob de table corrompu puisqu'elle est créer juste avant cette requete insertion ! si je met pas le champ auto-incrément dans la requete ca marche !

le prob c'est que j'ai des centaines de pages de scripts à revoir du coup !
pro : http://www.ohweb.fr -> studio de développement en PHP, expertise en e-commerce, certifié PrestaShop
perso : http://www.olecorre.com -> un dico de termes informatiques

J'ai toujours rêvé d'un ordinateur qui soit aussi facile à utiliser qu'un téléphone. Mon rêve s'est réalisé : je ne sais plus comment utiliser mon téléphone. [Bjarne Stroustrup]

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

23 juin 2006, 18:53

Sans vouloir remuer le couteau dans la plaie, donner une chaîne vide pour un champs auto-incrémenté n'était pas une très bonne idée dès le départ :roll: Parfois on se moque de moi parce que je suis extrêmement strict sur la façon de programmer, mais sur le long terme ça évite ce genre de problèmes.

Idéalement, je te conseillerais de modifier tes requêtes comme le suggère zeus. Tu peux aussi remplacer '' par NULL ou même 0. Sinon, voici d'autres pistes, par ordre de facilité:
  • changer le mode SQL de ton serveur pour enlever STRICT_ALL_TABLES et STRICT_TRANS_TABLES. Ça devrait changer l'erreur en warning
  • créer un TRIGGER (BEFORE INSERT) pour remplacer la chaîne vide par 0 ou NULL
J'en avais une autre mais elle m'est sortie de tête :o

Administrateur PHPfrance
Administrateur PHPfrance | 977 Messages

23 juin 2006, 21:00

suis pas à l'origine du code ! dans tout mes dev y a pas de chaine vide pour un incrément
pro : http://www.ohweb.fr -> studio de développement en PHP, expertise en e-commerce, certifié PrestaShop
perso : http://www.olecorre.com -> un dico de termes informatiques

J'ai toujours rêvé d'un ordinateur qui soit aussi facile à utiliser qu'un téléphone. Mon rêve s'est réalisé : je ne sais plus comment utiliser mon téléphone. [Bjarne Stroustrup]

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

23 juin 2006, 21:25

Tu noteras que j'ai dit que c'était une mauvaise idée, pas que c'était la tienne :lol:

À priori, si ce n'est pas à toi de maintenir l'application alors contente-toi de modifier le mode SQL, ça devrait fonctionner. Note que tu peux le modifier globalement ou uniquement pour la connexion utilisée, afin d'utiliser sur le même serveur des applications compatibles et d'anciennes appli.