Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PDO
PDO Forum d'entraide sur PDO (PHP Data Objects) : pilote générique de bases de données avec PHP. Avant de poster -> FAQ PDO et Cours PDO
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, 15h58   #1
Membre actif
 
Avatar de albedo0
 
Julien C
Inscription : février 2007
Messages : 207
Détails du profil
Informations personnelles :
Nom : Julien C
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : février 2007
Messages : 207
Points : 167
Points : 167
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 :
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
albedo0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 16h04   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 116
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 116
Points : 8 465
Points : 8 465
et quelle est l'erreur ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 16h07   #3
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Les marqueurs ne correspondent pas :faq_q_tex (requête) != :faq_q_text (bind).

Mais je doute que des apostrophes puissent être en cause.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 16h31   #4
Membre actif
 
Avatar de albedo0
 
Julien C
Inscription : février 2007
Messages : 207
Détails du profil
Informations personnelles :
Nom : Julien C
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : février 2007
Messages : 207
Points : 167
Points : 167
Citation:
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
albedo0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 16h32   #5
Membre actif
 
Avatar de albedo0
 
Julien C
Inscription : février 2007
Messages : 207
Détails du profil
Informations personnelles :
Nom : Julien C
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : février 2007
Messages : 207
Points : 167
Points : 167
J'en profite pour ajouter la classe sql :

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
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);
	}
}
albedo0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 16h52   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 116
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 116
Points : 8 465
Points : 8 465
suis la remarque de julp

ps : pourquoi ne pas étendre ta classe de PDO
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 19h40   #7
Membre actif
 
Avatar de albedo0
 
Julien C
Inscription : février 2007
Messages : 207
Détails du profil
Informations personnelles :
Nom : Julien C
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : février 2007
Messages : 207
Points : 167
Points : 167
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...
albedo0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 19h47   #8
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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 ?).
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 09h20   #9
Membre actif
 
Avatar de albedo0
 
Julien C
Inscription : février 2007
Messages : 207
Détails du profil
Informations personnelles :
Nom : Julien C
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : février 2007
Messages : 207
Points : 167
Points : 167
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...
albedo0 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 15h03.


 
 
 
 
Partenaires

Hébergement Web