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 01/01/2011, 23h10   #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 Probleme bindparam toutes les valeurs sont identiques

Bonjour,

Tout d'abord, vu la date, je vous souhaite tous mes voeux !

Concernant mon soucis, la fonction permet de préparer une requête d'insertion mysql à partir d'un tableau de valeur.

Exemple de tableau de donnee :
Code :
$data = array('user_id' => '', 'user_lastname' => 'aaa', 'user_firstname' => 'bbb' ) ;
Le problème doit se passer probablement au bind des paramètres car le résultat est que j'obtiens la dernière valeur de $data (ici "bbb") pour tous les champs de la BDD... Je n'arrive vraiment pas à comprendre le soucis !

Si quelqu'un avait une idée !! Merci par avance !

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
$fields = '' ;
		$values = '' ;
		$i = 1 ;
 
		if ( PDO_ON )
		{
			foreach( $data as $key => $value )
			{
				$fields .= $key ;
				$values .= ":$key" ;
				if ( count($data) != $i )
				{ 
					$fields .= ',' ;
					$values .= ',' ;
				}
				$i++ ;
			}
 
			$query = "INSERT INTO $table ($fields) VALUES ($values)" ;
			$req = $this -> PDOInstance -> prepare( $query ) ;
 
			foreach( $data as $key => $value )
			{
				$req -> bindParam(':'.$key , $value ) ;
				echo '-';
			}
 
			if ( !$req -> execute() ) 
			{
				throw new Exception( 'Erreur d\'enregistrement dans la base de données !' ) ;
			}
		}
albedo0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2011, 09h58   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Tel que tu fais tu perds tout l'interet d'une requete préparée.
D'une part parce que tu as mis la préparation dans une boucle et d'autre part puisque tu rassembles tous tes paramètres.

Pour faire une préparation dynamique, il est plus simple de ne pas nommer les paramètres :
Code :
1
2
3
4
5
6
 
$params = array_fill(0, count($data), "?");
$query = "INSERT INTO $table (" . implode(",",array_keys($data)) .") VALUES (" . implode(",", $params) . ")";
 
$req = $this -> PDOInstance -> prepare($query) ;
$req -> execute(array_values($data));
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2011, 13h16   #3
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
Effectivement, non simplement le code est plus simple et en plus ça marche !!!

Merci beaucoup !

Je dois maintenant m'atteler a créer ma fonction pour les select qui va être un peu plus corsée
albedo0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h36.


 
 
 
 
Partenaires

Hébergement Web