Page 1 sur 2
INSERT INTO ne marche pas
Posté : 04 nov. 2005, 11:57
par Gégé
Bonjour !
J'utilise une base sur online.net sur laquelle j'ai plusieurs tables où j'effectue plusieurs requêtes avec des scripts PHP et que j'administre avec phpMyAdmin.
Je suis coincé avec un INSERT qui ne fait rien (pas de message d'erreur), alors que le SELECT fonctionne.
La table
id int(11) Non auto_increment
maison varchar(10) Oui MMG14
medecin varchar(20) Oui NULL
date date Oui 0000-00-00
heure time Oui 00:00:00
patient varchar(40) Non
adresse varchar(80) Non
origine varchar(50) Oui NULL
diagnostic varchar(200) Non
destination varchar(50) Oui NULL
Le code fautif :
$sql1="INSERT INTO `MMG` ( `id` , `maison` , `medecin` , `date` , `heure` , `patient` , `adresse` , `origine` , `diagnostic` , `destination` )
VALUES (
NULL, 'MMG14', 'lui', 'azerty', '11:00:00', 'Bellepaire', 'Loches', 'RTL', 'Grosse tête', 'Hospitalisé'
);";
echo "<BR>sql=".$sql1;
$sql2="SELECT * FROM MMG ORDER BY date;";
La requête sql1 n'a aucun effet, alors que echo $sql1 affiche bien la requête voulue, et que sql2 affiche bien les enregistrements déjà présents dans la base.
Cette requête provient de phpMyAdmin, où elle fonctionne (à part le champ date, et pour cause !).
J'ai essayé un tas de combinaisons de guillemets différents, sans effet. Notez que le champ date a été remplacé par une chaîne de caractères sans provoquer de message d'erreur. En revanche, si j'ajoute d'autres erreurs grossières (erreur de guillemets), j'ai un message d'erreur.
C'est sûrement une bêtise, mais je suis je ne trouve pas la sortie.
Posté : 04 nov. 2005, 12:09
par charabia
Code : Tout sélectionner
$sql1="INSERT INTO `MMG` ( `id` , `maison` , `medecin` , `date` , `heure` , `patient` , `adresse` , `origine` , `diagnostic` , `destination` )
VALUES (
NULL, 'MMG14', 'lui', 'azerty', '11:00:00', 'Bellepaire', 'Loches', 'RTL', 'Grosse tête', 'Hospitalisé'
);";
Tu intègres "azerty" dans un champs date (0000-00-00) ?
Null pour un champs auto-incrémenté ?
--> Il va y avoir comme un souci je pense.

Evites de mettre un nom "date" à un champs date, ça pourrait prêter à confusion plus tard.
Code : Tout sélectionner
$sql1="INSERT INTO MMG ( id , maison , medecin , date , heure , patient , adresse , origine , diagnostic , destination ) VALUES ( '', 'MMG14', 'lui', '2005-11-04', '11:00:00', 'Bellepaire', 'Loches', 'RTL', 'Grosse tête', 'Hospitalisé' );";
Posté : 04 nov. 2005, 12:13
par mere-teresa
De plus, tu mets NULL dans le champ 'id' qui n'a pas l'air d'accepter les NULL (tu as coché NOT NULL ?) et de plus ce n'est pas conseillé
.
Et à quoi correspondent les Oui/Non dans la table (j'ai pas PHPMyAdmin sur moi )
Posté : 04 nov. 2005, 16:09
par Invité
Code : Tout sélectionner
$sql1="INSERT INTO `MMG` ( `id` , `maison` , `medecin` , `date` , `heure` , `patient` , `adresse` , `origine` , `diagnostic` , `destination` )
VALUES (
NULL, 'MMG14', 'lui', 'azerty', '11:00:00', 'Bellepaire', 'Loches', 'RTL', 'Grosse tête', 'Hospitalisé'
);";
Tu intègres "azerty" dans un champs date (0000-00-00) ?
Je précise bien que c'était pour test?. Normalement, ça devrait générer une erreur, et ça ne fait rien.
Quand je mets une date normale, ça ne marche pas mieux.
Null pour un champs auto-incrémenté ?
--> Il va y avoir comme un souci je pense.
Quand je mets '', ça ne fait pas mieux.

Evites de mettre un nom "date" à un champs date, ça pourrait prêter à confusion plus tard.
Bonne idée.
Code : Tout sélectionner
$sql1="INSERT INTO MMG ( id , maison , medecin , date , heure , patient , adresse , origine , diagnostic , destination ) VALUES ( '', 'MMG14', 'lui', '2005-11-04', '11:00:00', 'Bellepaire', 'Loches', 'RTL', 'Grosse tête', 'Hospitalisé' );";
Posté : 04 nov. 2005, 16:25
par mere-teresa
$sql1="INSERT INTO MMG ( id , maison , medecin , date_consultation , heure , patient , adresse , origine , diagnostic , destination ) VALUES (35, 'MMG14', 'lui', '2005-11-04', '11:00:00', 'Bellepaire', 'Loches', 'RTL', 'Grosse tête', 'Hospitalisé' );";
Posté : 05 nov. 2005, 01:52
par Invité
De plus, tu mets NULL dans le champ 'id' qui n'a pas l'air d'accepter les NULL (tu as coché NOT NULL ?) et de plus ce n'est pas conseillé
.
Et à quoi correspondent les Oui/Non dans la table (j'ai pas PHPMyAdmin sur moi )
Ça coince aussi avec ''.
Mais des requêtes similaires marchent avec NULL.
Oui Non correspond aux champs nuls.
Re: INSERT INTO ne marche pas
Posté : 05 nov. 2005, 02:08
par Gédé
Des nouvelles du front :
Bonjour !
J'utilise une base sur online.net sur laquelle j'ai plusieurs tables où j'effectue plusieurs requêtes avec des scripts PHP et que j'administre avec phpMyAdmin.
Je suis coincé avec un INSERT qui ne fait rien (pas de message d'erreur), alors que le SELECT fonctionne.
La table
id int(11) Non auto_increment
maison varchar(10) Oui MMG14
medecin varchar(20) Oui NULL
date date Oui 0000-00-00
heure time Oui 00:00:00
patient varchar(40) Non
adresse varchar(80) Non
origine varchar(50) Oui NULL
diagnostic varchar(200) Non
destination varchar(50) Oui NULL
J'ai supprimé toutes les valeurs non nulles. Tous les champs peuvent maintenant être nuls, sauf la clé principale id.
Le code fautif :
$sql1="INSERT INTO `MMG` ( `id` , `maison` , `medecin` , `date` , `heure` , `patient` , `adresse` , `origine` , `diagnostic` , `destination` )
VALUES (
NULL, 'MMG14', 'lui', 'azerty', '11:00:00', 'Bellepaire', 'Loches', 'RTL', 'Grosse tête', 'Hospitalisé'
);";
J'ai simplifié comme ça :
Pas mieux.
Posté : 05 nov. 2005, 11:37
par mere-teresa
Pour qu'on puisse t'aider, peux-tu sortir le SQL qui permet de créer tes tables (on pourra créer les mêmes sur nos serveurs locaux) et ainsi tester ta requête.
Posté : 05 nov. 2005, 11:41
par zeus
En ce qui concerne ton id, si tu veux que MySQL le gère tout seul, il te suffit de ne pas le placer dans la liste de champs à remplir
$sql1="INSERT INTO `MMG` (`maison` , `medecin` , `date` , `heure` , `patient` , `adresse` , `origine` , `diagnostic` , `destination` )
VALUES ('MMG14', 'lui', 'azerty', '11:00:00', 'Bellepaire', 'Loches', 'RTL', 'Grosse tête', 'Hospitalisé'
);";
Posté : 05 nov. 2005, 12:26
par Cyrano
Je signale au passage qu'en SQL, "date" est un mot réservé. Pour éviter ce genre de problème, il est bon de préfixer le nom des champs. Par exemple, dans une table "MMG", on mettra les champs mmg_id, mmg_date, etc.... et là on ne risque aucun conflit.
Posté : 05 nov. 2005, 17:39
par Invité
En ce qui concerne ton id, si tu veux que MySQL le gère tout seul, il te suffit de ne pas le placer dans la liste de champs à remplir
$sql1="INSERT INTO `MMG` (`maison` , `medecin` , `date` , `heure` , `patient` , `adresse` , `origine` , `diagnostic` , `destination` )
VALUES ('MMG14', 'lui', 'azerty', '11:00:00', 'Bellepaire', 'Loches', 'RTL', 'Grosse tête', 'Hospitalisé'
);";
Merci du tuyau, mais ce n'est pas mieux.
Posté : 05 nov. 2005, 17:40
par Invité
Pour qu'on puisse t'aider, peux-tu sortir le SQL qui permet de créer tes tables (on pourra créer les mêmes sur nos serveurs locaux) et ainsi tester ta requête.
Code : Tout sélectionner
CREATE TABLE MMG (
id int(11) NOT NULL auto_increment,
maison varchar(10) default 'MMG14',
medecin varchar(20) default NULL,
jour date default '0000-00-00',
heure time default '00:00:00',
patient varchar(40) default NULL,
adresse varchar(80) default NULL,
origine varchar(50) default NULL,
diagnostic varchar(200) default NULL,
destination varchar(50) default NULL,
PRIMARY KEY (id)
) TYPE=MyISAM;
Posté : 05 nov. 2005, 18:01
par Cyrano
Ça m'a pris trente seconde et phpMyAdmin pour trouver l'erreur :
Code : Tout sélectionner
INSERT INTO `MMG` ( `maison` , `medecin` , `jour` , `heure` , `patient` , `adresse` , `origine` , `diagnostic` , `destination` )
VALUES (
'MMG14', 'lui', 'azerty', '11:00:00', 'Bellepaire', 'Loches', 'RTL', 'Grosse tête', 'Hospitalisé'
)
Et non
Code : Tout sélectionner
INSERT INTO `MMG` ( `maison` , `medecin` , `date` , `heure` , `patient` , `adresse` , `origine` , `diagnostic` , `destination` )
VALUES (
'MMG14', 'lui', 'azerty', '11:00:00', 'Bellepaire', 'Loches', 'RTL', 'Grosse tête', 'Hospitalisé'
)
Je te laisse le soin de trouver la différence, elle est flagrante, d'autant plus que j'avais déjà soulevé le problème.
Posté : 05 nov. 2005, 22:37
par Invité
Ça m'a pris trente seconde et phpMyAdmin pour trouver l'erreur :
Code : Tout sélectionner
INSERT INTO `MMG` ( `maison` , `medecin` , `jour` , `heure` , `patient` , `adresse` , `origine` , `diagnostic` , `destination` )
VALUES (
'MMG14', 'lui', 'azerty', '11:00:00', 'Bellepaire', 'Loches', 'RTL', 'Grosse tête', 'Hospitalisé'
)
Et non
Code : Tout sélectionner
INSERT INTO `MMG` ( `maison` , `medecin` , `date` , `heure` , `patient` , `adresse` , `origine` , `diagnostic` , `destination` )
VALUES (
'MMG14', 'lui', 'azerty', '11:00:00', 'Bellepaire', 'Loches', 'RTL', 'Grosse tête', 'Hospitalisé'
)
Je te laisse le soin de trouver la différence, elle est flagrante, d'autant plus que j'avais déjà soulevé le problème.
Si tu fais allusion à jour/date, j'aurais pu faire l'erreur (personne n'est parfait !), mais non.
J'ai synchronisé les modifications de la table et de la requête.
Merci quand même.
J'ai vraiment l'impression que le problème vient plus d'un problème dans la page php que dans la requête elle-même(si elle marche dans phpmyadmin, elle devrait marcher ailleurs, et si les requêtes d'interrogation fonctionnent, les requêtes d'insertion devraient fonctionner aussi ?).
Il me semble avoir eu une histoire avec une page qui commençait comme il ne fallait pas, ou un truc comme ça.
Posté : 05 nov. 2005, 22:44
par Cyrano
On peut voir le code php utilisé pour l'insertion au juste ? Si on sait que le problème ne vient pas de la requête, alors le problème est ailleurs.