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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.