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:
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
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
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).
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";
Ensuite voilà ma fonction bindColumn() :
Dans cette fonction l'affichage de $param ou de $this->column[$column] fonctionne parfaitement.
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]; }
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 qui fonctionne correctement.
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;
Auriez-vous une idée ? Une piste que je pourrai étudier pour trouver mon problème ?
Merci d'avance.
Partager