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 05/05/2011, 15h52   #1
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
Par défaut bindColum()

Bonjour,

ayant développé un site pour à l'origine un serveur tournant en 5.3 et qui finalement s'avère être en 5.0.5 et qui ne subira pas de mise à jour de la version de PHP avant longtemps... J'ai du créer des class émulant le comportement de PDO.

Je suis malheureusement tombé sur un souci en tentant de reproduire le fonctionnement de la fonction PDOStatement::bindColumn()
Le fait est que je ne récupère aucune valeur autre que NULL...

Voici mon code d'exécution:
Code php :
1
2
3
4
5
6
7
$res = $dbh->query("SELECT id, nom FROM site");
	$res->execute();
	$res->bindColumn("id",$id);
	$res->bindColumn("nom",$nom);
	var_dump($id); // Affiche NULL
	while($r = $res->fetch() )
		echo $id . "-" . $nom . "<br />"; // Affiche vide => NULL
J'ai dans ma class PDOStatement une variable column qui me permet de faire le lien de référence. Je la créée dans execute() :
Code php :
1
2
3
4
// Mise à jour de column pour le bindColumn
		if( isSet($this->result[0]) && count($this->result[0]) > 0 )
			foreach($this->result[0] as $cle => $valeur)
				$this->column[$cle] = "test";
Je remplie le tableau avec la valeur test (c'était pour voir si une valeur null ou bien un caractère vide n'était pas la source de mon problème).

Ensuite voilà ma fonction bindColumn() :
Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
/*
	* Lie une colonne à une variable PHP 
	* @param (int) numéro de la colonne (en commençant à 1)
	* @param (mixed) Nom de la variable PHP à laquelle la colonne doit être liée.
	* @param (int) Non implémenté
	* @param (int) Non implémenté
	* @param (mixed) Non implémenté
	*/
	public function bindColumn($column, &$param, $type = "", $maxlen = "", $driverdata = "")
	{
		if( isSet($this->column[$column]) )
			$param = &$this->column[$column];
	}
Dans cette fonction l'affichage de $param ou de $this->column[$column] fonctionne parfaitement.

Et enfin ma fonction fetch() :
Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/*
	* Récupère la ligne suivante d'un jeu de résultat PDO
	* @return (array)
	*/
	public function fetch()
	{
		if( $this->valid() === false )
			return false;
		$el = $this->current();
		foreach($el as $cle => $val) // Stockage de la valeur des colonnes pour bindColumn
			$this->column[$cle] = $val;
		$this->next();
		return $el;
	}

Je ne comprend pas d'où provient mon erreur...

J'ai tenté des trucs basiques de ce genre pour vérifier que je comprenais bien le principe :
Code php :
1
2
3
function test(&$une_var){$une_var = 1;}
test($test);
echo $test;
Code qui fonctionne correctement.

Auriez-vous une idée ? Une piste que je pourrai étudier pour trouver mon problème ?
Merci d'avance.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/05/2011, 16h18   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
plutôt

Code :
$param = $this->column[$column];
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2011, 16h33   #3
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
C'était donc cela.

Car effectivement stocker une adresse dans une adresse c'est pas tiptop...
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/05/2011, 16h36   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
tu peux monter ta classe en entière ça m’intéresse
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 08h02   #5
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
J'ai encore un peu de travail à faire dessus mais ensuite je compte bien la mettre sur github.
A noter que je ne compte pas émuler toutes les fonctions mais juste les plus courante. Car par exemple pour les commit et compagnie je dois bien avouer que je n'ai aucune idée à l'heure actuelle de comment procéder pour reproduire cela sans faire une usine à gaz...
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/05/2011, 09h15   #6
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
Chose promise chose due.

https://github.com/xTG/PDO

Pas très complète mais suffit amplement pour une utilisation basique.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h53.


 
 
 
 
Partenaires

Hébergement Web