Bonjour,
je rencontre aujourd'hui un problème sur lequel j'ai bataillé toute la matinée et qui commence a me monter à la tête...
Je vous explique le problème :
je gère un site de e-commerce dont les produits sont mis a jours par import csv.
Aprés recherches, j'en est déduis que le problème venait de l’interprétation que mysql fait de ma requette.
je précise qu'avant chaque import en csv j'exécute un truncate tables peel_produits
Voici la requette d'un produit en particulier qui pose problème :
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érer 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érer dans la base de donnée 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é 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
la 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,
Ce n'est pas moi qui est écrit cette requête et sa m'a également choqué au premier abord, mais, après l'avoir copié collé dans phpmyadmin, cette requête marche, donc je ne pense pas que le problème vienne de cette syntaxe, même si j’admets qu'elle n'est pas très conventionnelle
Le echo donne la requête qui se trouve dans mon premier post, donc le problème n'est pas lié a la génération (si vous y tenez vraiment je peut mettre le code qui génère la requête mais sa représente un paquet de ligne)
et la fonction execute est la suivante :
public function execute($request)
{
$result = mysql_query($request) or die (mysql_error().'<br/>'.$request);
return new RecordSet($result);
}">
1.C'est une classe toute faite que je n'ai pas codé et qui fonctionne pour le reste, vus que c'est une fonction membre, le terme execute ne gène normalement pas.
2.en ce qui concerne le new RecordSet([parametre]) c'est l'instanciation d'une autre classe que je n'est pas détaillé vus que de toute façon je n'interprete pas la valeur de retour de cette fonction...
3.et quand au > c'est une faute de frappe lors du copié collé.
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 = ''
1) les 3 attributs qui te posent problème contiennent le mot "flash" ... ca ne serait pas un mot réservé dans une page PHP ?
(j'essaye au hasard, même si ca me semble tres bizarre...)
D'autres champs que les 3 cités sont-ils touchés par ton problème ?
2) Est-ce que le problème se pose avec tous les ajouts de produits ou juste pour certains produit spécifiques ?
3) Est-ce que cela a marché un jour ou bien jamais ?
4) Je ne me souviens plus de la syntaxe pour mettre une quote dans un ' ' ... Ici je vois 'l''induction'; ce n'est pas 'l\'induction' ?
5) le mot "position" a l'air d'être un mot réservé du langage SQL puisqu'il est coloré dans le BBCode du SDZ... (mais a priori, ca n'influerait pas que sur les 3 champs que tu cites... )
la reqmarque 1 j'y avait pensé aussi, mais comme tu dit sa parrait étonant et je n'est rien trouver sur google a ce sujet.
A priori seuls ces 3 champs seraient concernés par le problème vus que dans tous les cas l'id_marque est le bon aprés insertion.
2) tous les produits sont a priori concernés vus qu'un
SELECT * FROM peel_produits WHERE on_flash=1
ne me retourne aucun résultat.
3) Oui sa fonctionnait, peut être que les produits remplissent aujourd'hui une condition particulière qui fait que sa fou l'importation en l'air, notament l'apparition de quotes et c'est là que je te tire mon chapeau pour la remarque 4 : je vais essayer de rajouter un petit addslashes dans la requête
et le mot position n'influence a priori pas ma requete...
je regarde comment résoudre le problème n°4 et je vous tien au courant
Merci beaucoup
EDIT :
avec un addslashes c'est malheureusement la même chose
retour à la case départ...
c'est vraiment bizarre ce problème. comment ce fait il que phpmyadmin et mysql_query n'aient pas la même interprétation d'une même requête
J'ai pensé à un bug d'ENUM, mais apparemment la colonne est en tinyint.
Exécute la requête qui pose problème, et regarde si elle retourne des warnings (par exemple tape SHOW WARNINGS dans la console mysql juste après).
essaie ça :
SELECT on_flash, count(*) FROM peel_produits GROUP BY on_flash
ça renvoie quoi ?
Requete SQL mal interpréter par mysql
× 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.
Tutoriel complet MySQL !