Page 1 sur 1

Erreur SQL !

Posté : 29 déc. 2006, 20:12
par Sebe
Salut,

N'étant pas un pro de la requête, je me tourne vers vous pour avoir une info !

J'ai une requête toute simple :

Code : Tout sélectionner

CREATE TABLE IF NOT EXISTS `jos_cat` ( `id` INT NOT NULL default '0', `user_id` INT NOT NULL default '0', `recup_id` INT NOT NULL default '0', `date` DATE NOT NULL default '0000-00-00', `fc1` SMALLINT(3) UNSIGNED NULL, `fc2` SMALLINT(3) UNSIGNED NULL, `fcmax` SMALLINT(3) UNSIGNED NULL, `fcrecup` SMALLINT(3) UNSIGNED NULL, `fcca` SMALLINT UNSIGNED NULL, `tica1000` TIME NOT NULL default '00:00:00', `PRIMARY` KEY (`id`) ) TYPE=MyISAM;
mais une méga erreur que je n'arrive pas à déchiffrer :
SQL Error DB function failed with error number 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'KEY (`id`) ) TYPE=MyISAM' at line 15 SQL=CREATE TABLE IF NOT EXISTS `jos_cat` ( `id` INT NOT NULL default '0', `user_id` INT NOT NULL default '0', `recup_id` INT NOT NULL default '0', `date` DATE NOT NULL default '0000-00-00', `fc1` SMALLINT(3) UNSIGNED NULL, `fc2` SMALLINT(3) UNSIGNED NULL, `fcmax` SMALLINT(3) UNSIGNED NULL, `fcrecup` SMALLINT(3) UNSIGNED NULL, `vo2max` INTEGER UNSIGNED NULL, `fcca` SMALLINT UNSIGNED NULL, `tica1000` TIME NOT NULL default '00:00:00', `PRIMARY` KEY (`id`) ) TYPE=MyISAM;
Qui peut m'aider ?

Merci

Posté : 29 déc. 2006, 20:19
par Ajoloca
Bonjour,

Regarde cette ligne (entre autres)
`id` INT NOT NULL default '0', 
Tu ne trouves rien de bizarre ???
Tu déclares ton champ en tant qu'un entier et tu lui assignes une valeur de type caractère.

Ensuite ça
`PRIMARY` KEY (`id`) 
c'est quoi ???
'PRIMARY' c'est le nom d'une colonne ???

Posté : 29 déc. 2006, 20:42
par Hubert Roksor
Tu déclares ton champ en tant qu'un entier et tu lui assignes une valeur de type caractère.
Pour MySQL c'est tout à fait normal de placer un nombre entre '. D'ailleurs, même en sql_mode "ANSI,TRADITIONAL" voici ce qu'il me répond quand je demande SHOW CREATE TABLE

Code : Tout sélectionner

CREATE TABLE "test" ( "id" int(10) unsigned NOT NULL default '42', PRIMARY KEY ("id") )
En même temps, c'est pas une raison pour mettre des apostrophes là où il n'y a pas lieu donc c'est une bonne idée de ne pas mettre ses nombres entre apostrophes. Pour le reste, comme le disait Ajoloca, les backticks ` servent à "encadrer" le nom d'une colonne/table/db et sont 100% optionnels du moment que le nom en question n'est pas un mot réservé. En clair : vire tous les `, ils ne servent à rien.

Posté : 29 déc. 2006, 20:45
par Xenon_54
Tu devrais les virer pour PRIMARY au moins vu que le nom ne doit pas être protégée mais bien utilisé pour la création des clefs.

Posté : 29 déc. 2006, 21:59
par Sebe
Re,

Merci de m'avoir répondu. La solution sont les ` de PRIMARY ... je vous remercie tous !

Petite info pour le reste qui devrait-être valable:
J'utilise un portail Joomla! pour mon site et je me suis lancé dans la création d'une extension. Pour créer ma requête, j'ai utilisé un modéle d'une autre extension ... ce qu'il n'explique pas l'erreur mais qui explique le reste de la requête !

Merci et A+

Posté : 29 déc. 2006, 22:10
par Sebe
Je confirme pour tout le reste car tout fonctionne très bien !

Merci

Posté : 29 déc. 2006, 22:28
par Xenon_54
Tu m'as fait peur avec ton joomla. J'étais certain que t'étais le client à qui j'avais répondu ce matin pour son Joomla et php.ini

:lol:

Posté : 29 déc. 2006, 22:43
par Sebe
Tu m'as fait peur avec ton joomla. J'étais certain que t'étais le client à qui j'avais répondu ce matin pour son Joomla et php.ini

:lol:
Non, moi, je prends le temps d'essayer de comprendre et de proposer un nouveau composant ... c'est dur de comprendre pour moi qui ne métrise pas le PHP, le JavaScript et le SQL !

Merci