Requête mal interprétée par mysql. D'où peut venir ce genre de problème ?

Solutions (9)
Tags :
  • MySQL
  • Programmation
|
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 :
  1. 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,

@++
fab
  • Meuniers a édité ce message
Contenus similaires
  • Autres pages sur : requete mal interpretee mysql venir genre probleme
Score
0
òh
òi
|
ce n'est de toute façon pas la question est ne résoud pas mon problème, qui est à la base le fait que ces 3 champs ne soient pas interprété par mysql lors de l'exécution de la requête par mysql_query...

Merci quand même pour les conseils
  • Commenter cette réponse |
Score
0
òh
òi
, Modérateur |
J'ai jamais parlé de faire un site compatible avec d'autres BDDs.
Mais c'est pas grave, laisse tomber.

  • Commenter cette réponse |
Score
0
òh
òi
|
Je vois pas pourquoi je m'embèterais a faire un site compatible avec d'autres bdd alors que la quazi-totalité des hébergeurs proposents du mysql...

Citation :
les champs sont de types suivant :
on_flash : tinyint(4)
flash_start et flash_end : datetime
  • Commenter cette réponse |
Score
0
òh
òi
, Modérateur |
Citation :
MySQL est de très loin le moteur de bdd le plus utilisé dans le développement de site web. très peut d'hébergeur propose du oracle (qui n'a d'ailleur aucun intéret pour un site web de légère empleur)...

Aucun rapport, mais bon. Puis d'un côté, vu que tu utilises mysql_query, tu galérerais dans tous les cas.

Quels sont les types de données de tes 3 colonnes qui posent problèmes ?
  • Commenter cette réponse |
Score
0
òh
òi
|
MySQL est de très loin le moteur de bdd le plus utilisé dans le développement de site web. très peut d'hébergeur propose du oracle (qui n'a d'ailleur aucun intéret pour un site web de légère empleur)...

en ce qui le code php a priori pas d'erreur, je rappelle que la ligne est correctement insérer dans la bdd et que seuls 3 champs ne contiennent pas la valeur attendue...

  1. echo $request;
  2. $db->execute($request);

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 :
  1. public function execute($request)
  2. {
  3. $result = mysql_query($request) or die (mysql_error().'<br/>'.$request);
  4. return new RecordSet($result);
  5. }


merci
  • Commenter cette réponse |
Score
0
òh
òi
, Modérateur |
Ouais, mais ça ne fonctionne qu'avec MySQL... le jour où tu changes de BDD, tu dois changer toutes tes requêtes.

Bref, fais voir ton code PHP qui exécute ça.
  • Commenter cette réponse |
Score
0
òh
òi
|
ce n'est pas conventionnel je vous l'accorde, mais sa marche. la requête est générer dynamiquement et c'est donc plus simple.
Le site de mysql lui même présente cette méthode (http://dev.mysql.com/doc/refman/5.0/fr/insert.html) donc ma requête n'est pas fausse.
La preuve, et comme je l'est dit dans mon premier post, phpmyadmin m'exécute correctement cette requête. le problème est que je ne comprend pas pourquoi, lorsque j'exécute cette requête avec un mysql_query, la valeur de on_flash n'est pas la même... je ne vois vraiment pas d'où viens ce problème

Merci quand même pour vos réponses rapides
  • Commenter cette réponse |
Score
0
òh
òi
|
La requete que tu as fait est pour un update. "UPDATE matable SET champ1 = 'xxx'"
  • Commenter cette réponse |
Score
0
òh
òi
, Modérateur |
Salut,

Même si MySQL est un peu pourri et te permet de faire des INSERT INTO ... SET
Ce n'est pas le bon format pour INSERT INTO.

Un INSERT INTO, c'est
  1. INSERT INTO maTable (champ1, champ2, champ3, champ4, ...) VALUES (valeur1, valeur2, valeur3, valeur4, ...)

  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS