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 :

Apostrophe avec les requetes preparees pdo bindvalue


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 98
    Points : 45
    Points
    45
    Par défaut Apostrophe avec les requetes preparees pdo bindvalue
    Bonjour, j'ai un problème avec les mots contenants des apostrophes lors de l'insertion dans ma base de données.
    Alors que j'utilise PDO avec des requêtes préparées et le bindvalue qui devait me permettre d’effectuer les échappements des mots à apostrophes comme expliquer dans la documentation de php PDO, mais malheureusement cela n'est pas le cas. Ainsi si j’insère un champ contenant un apostrophe j'ai une erreur sans apostrophe tout roule.
    voici le code :
    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
    	$reqPrepare= "INSERT IGNORE INTO reception (num_recep,id_caisse,id_produit,id_pays,montant,user_name)
            SELECT '',(SELECT id_caisse FROM caisse WHERE nom=:nom_caisse) AS id_caisse,
           (SELECT id_produit FROM produit WHERE description=:produit) AS id_produit,
           (SELECT id_pays FROM pays WHERE description=:pays) AS id_pays,:montant,:user_name";
     
    	  $variables = array('nom_caisse'=> $_POST["caisseRecep"],
    	                      'produit'=>$_POST["prodRecep"],
    						  'pays'=> $_POST["paysRecep"],
    						  'montant'=> $_POST["mntantTTC"],
    						  'user_name'=> $_SESSION["user_name"]); 
    	 $typeVariables = array('nom_caisse'=> PDO::PARAM_STR,
    						  'produit'=> PDO::PARAM_STR,
    						  'pays'=> PDO::PARAM_STR,
    						  'montant'=> PDO::PARAM_INT,
    						  'user_name'=> PDO::PARAM_STR);
     
    	   // Exécuter la méthode
         $gest->insert($reqPrepare,$variables,"RE",$typeVariables); 
     
    	 //voici la methode appele
    	 public function insert($reqPrepare,$variables,$num,$typeVariables=false)
        {
         try {
    			$this->_connexion->beginTransaction();
    			// on prépare notre requête
    			$requete_prepare_1=$this->_connexion->prepare($reqPrepare);
    			//Associer les valeurs aux place holders
    			foreach($variables as $key => $value)
    			{
    				if($typeVariables)
    					$requete_prepare_1->bindValue(":".$key."",$value,$typeVariables[$key]);
    				else
    				{
    					if(is_int($value))
    						$param = PDO::PARAM_INT;
    					elseif(is_bool($value))
    						$param = PDO::PARAM_BOOL;
    					elseif(is_null($value))
    						$param = PDO::PARAM_NULL;
    					elseif(is_string($value))
    						$param = PDO::PARAM_STR;
    					else
    						$param = FALSE;
     
    					if($param)
    						 $requete_prepare_1->bindValue(":".$key."",$value,$param);
    				}
    			}
    			if (!$requete_prepare_1->execute())
                 {echo "<BR>Erreur dans l'exécution de la requête<br>";
    			 exit();}
    			 $msg=sprintf('%08d',$this->_connexion->lastInsertId());
    			$this->_connexion->commit();
    			return $num.$msg;
     
    		 }
    	catch(PDOException $e) {
    				$this->_connexion->rollback();
    				//on affiche un message d'erreur ainsi que les erreurs
    				echo 'Tout ne s\'est pas bien passé, voir les erreurs ci-dessous<br />';
    				echo 'Erreur : '.$e->getMessage().'<br />';
    				echo 'N° : '.$e->getCode(); 
     
    				//on arrête l'exécution s'il y a du code après
    			    exit();
    		}
     
    	}

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Quelle valeur te pose problème et quelle erreur obtiens-tu ?

    Tu as essayé de faire une requête préparée "à la main" sans utiliser ton automisation sur les bind ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 98
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Quelle valeur te pose problème et quelle erreur obtiens-tu ?
    les valeurs qui me pose problème ce sont les valeurs avec apostrophe exemple (l'ami) si je veux l'insérer j'obtiens une erreur mais sans l'apostrophe (l ami) ça passe.
    Tu as essayé de faire une requête préparée "à la main" sans utiliser ton automisation sur les bind ?
    Oui presque en mettant $typeVariables à true dans la methode

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Quelles sont les colonnes qui posent problème ?
    Tu n'as pas donné l'erreur obtenue.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 98
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Quelles sont les colonnes qui posent problème ?
    c'est la colonne des pays c'est id_pays puisque ce dernier est remplir par l'identifiant du pays selectionné en faisant un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (SELECT id_pays FROM pays WHERE description=:pays) AS id_pays
    et parmi c'est pays il y'a la Côte d'ivoire.
    Tu n'as pas donné l'erreur obtenue.
    je fais un ajax pour insérer les données en arrière plan ainsi c'est mon message d'erreur que j'ai spécifié au niveau du try lorqu'il y'a une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (!$requete_prepare_1->execute())
     {echo "<BR>Erreur dans l'exécution de la requête<br>";
    qui s'affiche. si je veux le faire à la main cela serait impossible car je provoquerais une erreur de syntaxe avec 'Côte d'ivoire' comme pays.
    Je pense que l'erreur provient du non échappement effectuer par le bindValue alors que ceci devait être le cas.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Met la vraie erreur PDO au lieu d'un message personnalisé.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 98
    Points : 45
    Points
    45
    Par défaut
    salut, le problème ne vient pas de PDO bindvalue mais plutôt de mon formulaire avec les champs select. lorsqu'un mot contient un apostrophe, ce dernier est coupé au niveau de tous ce qui vient avant l'apostrophe. Et cela que ça soit en php où j'ai transmis la valeur en post pour voir le contenu qu'en Jquery où j'affiche la valeur dans un alert après sélection d'un élément avec l'événement onchange. j'avoue que je ne comprend pas cela.

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Est-ce que dans le select tu as bien la value complète ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 98
    Points : 45
    Points
    45
    Par défaut
    Oui effectivement c'était l'erreur car les valeur était coupées lorsqu'il y avait des apostrophe.
    j'ai eu la solution ici http://www.developpez.net/forums/d91...tes-d-options/ en utilisant htmlspecialchars sur les values.
    Merci à vous

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/04/2006, 11h02
  2. [MySQL] Encore un probleme de variables avec les requetes sql
    Par eown dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 14/04/2006, 11h01
  3. PROBLEME AVEC LES REQUETES IS NULL / NOT EXISTS
    Par sylvaine dans le forum Langage SQL
    Réponses: 5
    Dernier message: 04/06/2004, 13h26
  4. [VB6]Prob avec les requêtes multiples
    Par cammipascal dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 30/03/2004, 18h46
  5. problemes de performances avec les requetes select
    Par berry dans le forum Requêtes
    Réponses: 3
    Dernier message: 10/07/2003, 13h39

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