Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/08/2011, 11h26   #1
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 75
Détails du profil
Informations personnelles :
Âge : 21

Informations forums :
Inscription : janvier 2007
Messages : 75
Points : 17
Points : 17
Par défaut La petite surprise de mysql : requete mal interprétée

Bonjour,
Je rencontre aujourd'hui un problème sur lequel j'ai bataillé toute la matinée et qui commence à me monter à la tête...

Je vous explique le problème :
je gère un site de e-commerce dont les produits sont mis à jours par import csv.

Après recherches, j'en ai déduit que le problème venait de l’interprétation que mysql fait de ma requête.

Je précise qu'avant chaque import en csv, j'exécute un truncate tables peel_produits.

Voici la requête d'un produit en particulier qui pose problème :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
INSERT INTO peel_produits 
SET id = '1303', 
  reference = '43506', 
  nom_fr = 'Cocotte ovale noire 290 mm ', 
  descriptif_fr = ' En fonte émaillée, avec couvercle de même épaisseur que la cocotte pour une répartition uniforme de la chaleur. Poignées étudiées pour une bonne prise en main. Email cuit à 790ºC pour une longévité accrue. Très lisse il se nettoie très facilement. Bouton Haute Température résistant à la chaleur sans limite de température pour le bouton métal. Fond ultra-lisse. Compatible avec toutes les sources de chaleur y compris l''induction. Contenance : 4,70 l pour 6 personnes ', 
  description_fr = '', 
  nom_en = 'Nom anglais', 
  descriptif_en = 'DescriptifAng', 
  description_en = 'Description ang', 
  image1 = '43506-Image 1.jpg', 
  image2 = '', 
  image3 = '', 
  image4 = '', 
  image5 = '', 
  image6 = '', 
  image7 = '', 
  image8 = '', 
  image9 = '', 
  image10 = '', 
  prix = '208.31', 
  prix_revendeur = '0', 
  prix_flash = '0', 
  prix_achat = '0', 
  poids = '0', 
  date_insere = '2011-07-25', 
  date_maj = '2011-07-25', 
  promotion = '0', 
  tva = '19.6', 
  etat = '1', 
  on_stock = '0', 
  delai_stock = '', 
  seuil_stock = '0', 
  stock = '3', 
  affiche_stock = '1', 
  on_promo = '0', 
  on_new = '0', 
  on_rollover = '0', 
  on_special = '0', 
  on_perso = '0', 
  on_top = '0', 
  position = '0', 
  meta_titre = ' Cocotte ovale noire 290 mm ', 
  meta_desc = ' En fonte émaillée, avec couvercle de même épaisseur que la cocotte pour une répartition uniforme de la chaleur. Poignées étudiées pour une bonne prise en main. Email cuit à 790ºC pour une longévité accrue. Très lisse il se nettoie très facilement. Bouton Haute Température résistant à la chaleur sans limite de température pour le bouton métal. Fond ultra-lisse. Compatible avec toutes les sources de chaleur y compris l''induction. Contenance : 4,70 l pour 6 personnes ', 
  meta_key = 'Fonte emaillee, cocotte, noire, 29 cm, le creuset ', 
  on_flash = '1', 
  flash_start = '2011-07-26 00:00:00', 
  flash_end = '2011-08-26 00:00:00', 
  id_marque = '00000000021', 
  etat_stock = '0', 
  on_rupture = '0', 
  lang = '', 
  prix_promo = '0', 
  paiement = '', 
  type_prix = ''
j'exécute cette requette en php avec un mysql_query ($req) or die(mysql_error()) et la fonction ne me retourne aucune erreur.

Après vérification, le produit est bien inséré dans la base de données à un détail près : on_flash n'est pas égal à 1 mais à 0, et les dates flash_start et flash_end sont également à 0000-00-00 00:00:00.

Encore plus fort, si je copie-colle cette requête directement dans phpMyAdmin, là le produit est correctement inséré dans la base de données avec les bonnes valeurs pour on_flash, flash_start et flash_end.

Il n'y a aucun doute sur le fait que c'est bien la même requête qui est exécutée par php.
les champs sont de types suivant :
on_flash : tinyint(4)
flash_start et flash_end : datetime

La version utilisée est MySQL: 5.0.22 sous microsoft server 2003

Là, je ne comprend vraiment pas d'où peut venir le problème et je me tourne donc vers vous, en espérant que quelqu'un puisse m'aider,

@++
fab
fabienlege est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 23h24   #2
Invité régulier
 
Inscription : décembre 2007
Messages : 78
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 78
Points : 8
Points : 8
Code :
1
2
3
INSERT INTO MaTable(champ1,...)VALUES(val1,...)
 
UPDATE MaTable SET champ1=val1,champ2=val2,...
Il ne faut pas tout mélanger
majong est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 09h55   #3
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 75
Détails du profil
Informations personnelles :
Âge : 21

Informations forums :
Inscription : janvier 2007
Messages : 75
Points : 17
Points : 17
Eh si, on peut tout mélanger (http://dev.mysql.com/doc/refman/5.5/en/insert.html). Je sais que ça n'est pas très conventionnel et que ça ne marche que sous mysql, mais ça marche...
fabienlege est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 10h44   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 026
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 026
Points : 18 317
Points : 18 317
Envoyer un message via MSN à CinePhil
Comme majong, je pense que la syntaxe standard de l'insertion est préférable.

Citation:
on_flash : tinyint(4)
Alors inutile de mettre la valeur numérique entre apostrophe. Idem pour les prix et toutes les autres colonnes de type numérique.

Citation:
Il n'y a aucun doute sur le fait que c'est bien la même requête qui est exécuté par php
Tu as fait un echo de la requête avant soumission par mysql_query ?

De plus, tu devrais revoir la conception de ta BDD qui n'est pas du tout normalisée ; tu utilise le sgbd comme un tableur !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h56.


 
 
 
 
Partenaires

Hébergement Web