IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[PDO] Debuggage d'une requête [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Homme Profil pro
    Webdesigner
    Inscrit en
    Mars 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2011
    Messages : 64
    Par défaut [PDO] Debuggage d'une requête
    Bonjour,

    Je bloque depuis ce matin sur une requête qui ne fonctionne pas et je ne parviens pas à la débugger. J'ai testé les valeurs passées en paramètres de nombreuses fois et ils sont corrects. Je pense que le problème vient des quotes puisque je passe en paramètre un tableau sérialisé, mais même les addslashes n'y font rien. Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // L'appel de la fonction retourne un tableau sérialisé qui correspond aux données d'une courbe
    $newCurve = enlargeCurve( $db->getCurve($_POST['curveId'])->values, $percentage );
    // J'appelle alors la fonction pour remplacer les anciennes données par les nouvelles
    $db->updateRealCurve( intval($_POST['curveId']), intval($_POST['caseId']), addslashes($newCurve) );
    Les trois valeurs passées en paramètres sont correctes, j'en suis certain. C'est l'update qui ne s'effectue pas. Voici le code de la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public function updateRealCurve($idCurve, $idCase, $values) {
    	$statement = $this->db->prepare($this->updateRealCurve);
    	$statement->bindParam(':idCurve', $idCurve, PDO::PARAM_INT);
    	$statement->bindParam(':idCase', $idCase, PDO::PARAM_INT);
    	$statement->bindParam(':values', $values, PDO::PARAM_STR);
    	if( $statement->execute() )
    		echo "requête ok";
    	else
    		echo "erreur";
    }
    Ce code me retourne "erreur", il y a donc une erreur dans la requête. J'ai essayé d'utiliser les fonctions errorInfo et errorCode de PDO mais elles ne retournent rien. Si quelqu'un a une idée... Merci beaucoup !

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920

  3. #3
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public function updateRealCurve($idCurve, $idCase, $values) {
    	$statement = $this->db->prepare($this->updateRealCurve);
    Il devrait avoir erreur ici, car on passe en paramètre à la méthode PDO::prepare() : $this->updateRealCurve, la méthode elle même (une récursivité finalement).

  4. #4
    Membre confirmé
    Homme Profil pro
    Webdesigner
    Inscrit en
    Mars 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2011
    Messages : 64
    Par défaut
    Salut,

    Merci pour la page concernant les erreurs, j'ai finalement réussi à afficher l'erreur obtenue. Cependant, il s'agit bien d'une erreur de syntaxe mais je ne parviens pas à résoudre le problème puisque les quotes sont correctement échappées par PDO. Voici mon erreur :



    J'ai affiché en dessous le résultat de ma fonction qui correspond à la valeur que je souhaite enregistrer dans la base de données.

    RunCodePhp : Ce code fonctionne parfaitement pour toutes mes autres requêtes, je ne pense donc pas que le problème vienne de là.

  5. #5
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Regarde ce post (il y peu), peut être rencontre tu le même problème :
    Sauvegarder un objet en base de données

    Mise à part ça, je remarques qu'un addslashes() est effectué.
    Normalement il n'y a pas à le faire, PDO gère cela automatiquement.

  6. #6
    Membre confirmé
    Homme Profil pro
    Webdesigner
    Inscrit en
    Mars 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2011
    Messages : 64
    Par défaut
    Merci pour ta réponse. J'ai essayé d'encoder en base 64 mais j'obtiens un résultat assez étrange et la requête ne fonctionne toujours pas. J'ai l'impression que la valeur est trop longue, pourtant le champ dans la base de données est bien de type TEXT =/

    Edit : j'ai supprimé les addslashes avant de faire la capture d'écran que j'ai postée quand je me suis rendu compte que PDO les gérait tout seul.

  7. #7
    Membre confirmé
    Homme Profil pro
    Webdesigner
    Inscrit en
    Mars 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2011
    Messages : 64
    Par défaut
    J'ai fini par trouver la solution qui n'avait en fait rien à voir avec la fonction serialize(). Ma variable s'appelle values, et il se trouve que c'est un mot clé en SQL. Je l'ai donc simplement entourée des symboles `` et ça fonctionne... Toute une journée pour ça ! Merci pour vos réponses et à bientôt

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. PDO Exception levée pour une requête
    Par jlievens dans le forum Doctrine2
    Réponses: 2
    Dernier message: 31/07/2012, 16h14
  2. envoyer une requête par pdo
    Par laurentSc dans le forum Langage
    Réponses: 2
    Dernier message: 16/06/2011, 14h10
  3. [MySQL] Mettre des conditions dans une requête mysql avec pdo
    Par shima5 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 07/10/2010, 21h11
  4. [MySQL] Exécution d'une requête impossible sur un PDO
    Par vincevince7 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 19/08/2010, 00h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo