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();
		}
 
	}