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 :

Requetes préparées et erreur d'apostrophe


Sujet :

PHP & Base de données

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 248
    Points : 231
    Points
    231
    Par défaut Requetes préparées et erreur d'apostrophe
    Bonjour,

    J'utilise PDO avec des requêtes préparées, mais j'ai une erreur des lors que j'ai un apostrophe dans le titre d'une FAQ que je gère. Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $pre = "UPDATE article_faq_questions SET faq_q_category = :faq_q_category, faq_q_title = :faq_q_title, faq_q_text = :faq_q_tex WHERE faq_q_id = :faq_q_id " ;
     
    $update = Factory::get( BDD_DRIVER ) -> prepare( $pre );
    $update -> bindValue( ':faq_q_category' , $faq_q_category ) ;
    $update -> bindValue( ':faq_q_title' 	, $faq_q_title ) ;
    $update -> bindValue( ':faq_q_text' 	, $faq_q_text ) ;
    $update -> bindValue( ':faq_q_id' 	, $faq_q_id ) ;
    $update = $update -> execute() ;
    Quelqu'un aurait-il une idée ?

    Merci par avance

  2. #2
    Expert éminent sénior

    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
    Points : 10 726
    Points
    10 726
    Par défaut
    et quelle est l'erreur ?

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Les marqueurs ne correspondent pas :faq_q_tex (requête) != :faq_q_text (bind).

    Mais je doute que des apostrophes puissent être en cause.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 248
    Points : 231
    Points
    231
    Par défaut
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'absence ?', '127.0.0.1')' at line 3' in /Volumes/Donnees/Sites/admin/class/class.MySQL.php:70 Stack trace:
    #0 [internal function]: PDO->query('INSERT INTO use...')
    #1 /Volumes/Donnees/Sites/admin/class/class.MySQL.php(70): call_user_func_array(Array, Array)
    #2 [internal function]: MySQL->__call('query', Array)
    #3 /Volumes/Donnees/Sites/admin/class/main.class.php(595): MySQL->query('INSERT INTO use...')
    #4 /Volumes/Donnees/Sites/admin/class/faq.class.php(229): mainClass->addLog('Admin:FAQ - Mis...')
    #5 /Volumes/Donnees/Sites/admin/class/faq.class.php(71): classFaq->updateQuestion('4')
    #6 /Volumes/Donnees/Sites/admin/admin_faq.php(28): classFaq->adminFaqController()
    #7 /Volumes/Donnees/Sites/admin in /Volumes/Donnees/Sites/admin/class/class.MySQL.php on line 70

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 248
    Points : 231
    Points
    231
    Par défaut
    J'en profite pour ajouter la classe sql :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    <?php
     
    class MySQLException extends Exception {
     
    }
     
    class MySQL /* implements DB */ {
     
    	private $oPDO = NULL;
     
    	/**
    	 * Mémorise l'instance unique.
    	 *
    	 * @var		MySQL.
    	 */
    	static private $oInstance = NULL;
     
    	/**
    	 * Redéfinit le constructeur pour le rendre inaccessible.
    	 *
    	 * @return	void
    	 */
    	private function __construct( ) {
     
    		$this -> oPDO = new PDO( 'mysql:host='.BDD_ADRESS.';dbname='.BDD_BASE_NAME, BDD_USER_NAME, BDD_PASSWORD);
    		$this -> oPDO -> setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    	}
     
    	/**
    	 *
    	 * @return unknown_type
    	 */
    	public function __clone( ) {
     
    		throw new MySQLException( );
    	}
     
    	/**
    	 *
    	 * @return unknown_type
    	 */
    	public function __wakeUp( ) {
     
    		/* Vérification de la connexion. */
    		if ( self::$oInstance instanceof self) {
    			throw new MySQLException( );
    		}
     
    		/* Correction de la référence. */
    		self::$oInstance = $this;
    	}
     
    	/**
    	 * Fournit l'unique instance du Singleton.
    	 *
    	 * @return	MySQL
    	 */
    	static public function getInstance( ) {
     
    		/* Vérification que l'instance n'a pas déjà été initialisée. */
    		if ( ! (self::$oInstance instanceof self)) {
    			self::$oInstance = new self( );
    		}
     
    		/* Retour de l'unique instance. */
    		return self::$oInstance;
    	}
     
    	public function __call( $sMethod, $aParams) {
    		return call_user_func_array( array( $this -> oPDO, $sMethod), $aParams);
    	}
    }

  6. #6
    Expert éminent sénior

    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
    Points : 10 726
    Points
    10 726
    Par défaut
    suis la remarque de julp

    ps : pourquoi ne pas étendre ta classe de PDO

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 248
    Points : 231
    Points
    231
    Par défaut
    Citation Envoyé par julp Voir le message
    Les marqueurs ne correspondent pas :faq_q_tex (requête) != :faq_q_text (bind).

    Mais je doute que des apostrophes puissent être en cause.
    Ce n'est pas le soucis, j'ai juste du supprimer le t en mettant en forme mon code dans mon message...

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Mais en l'occurrence l'erreur que vous donnez ne vient visiblement ni de cette requête (INSERT) ni d'une requête préparée (query ; oublié de protéger vos données avec quote ?).

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 248
    Points : 231
    Points
    231
    Par défaut
    Citation Envoyé par julp Voir le message
    Mais en l'occurrence l'erreur que vous donnez ne vient visiblement ni de cette requête (INSERT) ni d'une requête préparée (query ; oublié de protéger vos données avec quote ?).
    J'ai essayé de protéger avec quote(), mais cela ne marche mieux et il me semblait bien qu'avec les requêtes préparées je n'avais pas ce genre de soucis...

Discussions similaires

  1. requete SQL Select : erreur syntaxe
    Par samtheh dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 11/06/2007, 16h58
  2. Requete mise à jour:erreur affichage sur formulaire
    Par milielf dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 12/07/2006, 11h25
  3. probleme de requetes VBA/ACESS. erreur execution 3251
    Par schwinny dans le forum Access
    Réponses: 9
    Dernier message: 05/07/2006, 10h11
  4. Simple requete generant une erreur
    Par NeHuS dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/06/2006, 15h24
  5. Ma requete a une erreur est je na la trouve pas
    Par Jamal_71 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 09/02/2006, 09h11

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