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/12/2010, 22h48   #1
Membre éprouvé
 
Avatar de gtraxx
 
Homme Aurélien Gérits
Développeur Web
Inscription : mai 2006
Messages : 1 045
Détails du profil
Informations personnelles :
Nom : Homme Aurélien Gérits
Âge : 30
Localisation : Belgique

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2006
Messages : 1 045
Points : 498
Points : 498
Par défaut upgrade extension de pdo avec php 5.3

Bonsoir à tous, j'ai étendu PDO dans php 5.2 sans aucun problème.
Cette extension est définie dans ma librairie magix cjquery.
Une chose que je ne comprend pas encore c'est pourquoi elle ne fonctionne pas sous php 5.3.
C'est surtout les fetch qui débloque, et me retourne cette erreur :
Citation:
SQLSTATE[HY000]: General error: mode must be an integer382
J'essaie de trouver les modifications à faire pour upgrader la librairie.
Une idée sur la cause du message ?
Voila le début de ma class avec l'instance principal :
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
function __construct () 
    {
    	if (!(self::getInfo() instanceof CallDbData)) {
    		throw new Exception('Invalid instanceof CallDbData');
    	}
    	if (!(self::PDOInstance() instanceof PDO)) {
    		throw new Exception('Invalid instanceof PDO');
    	}
        try 
        {
			self::PDOInstance()->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        }
        catch(PDOException $e){
        	print $e->getMessage();
		}
    }
    /**
     * instance singleton self (DataObjects)
     * @access public
     */
    public static function getInstance(){
    	if (!isset(self::$instance)){
    		if(is_null(self::$instance)){
				self::$instance = new DataObjects();
			}
      	}
		return self::$instance;
    }
	/**
     * instance singleton self (CallDbData)
     * @access protected
     */
    protected static function getInfo(){
    	if (!isset(self::$getinfo)){
    		if(is_null(self::$getinfo)){
				self::$getinfo = new CallDbData();
			}
      	}
		return self::$getinfo;
    }
	/**
     * instance singleton self (PDO)
     * @access protected
     */
    protected static function PDOInstance(){
    	if (!isset(self::$PDOInstance)){
    		if(is_null(self::$PDOInstance)){
				self::$PDOInstance = new PDO(self::getInfo()->getconnStr(),self::getInfo()->getuser(),self::getInfo()->getpass());
			}
      	}
		return self::$PDOInstance;
    }
Lorsque je repasse sous php 5.2 sa fonctionne, puis si je bascule le message reviens avec un simple fetchall
__________________
Au petit déjeuner, je prend du PHP et au souper du jQuery.
AFUP 2009 : Bien optimiser son code pour le référencement
Mon projet open source de librairie PHP 5: magix cjquery
gtraxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 23h37   #2
Membre éprouvé
 
Avatar de gtraxx
 
Homme Aurélien Gérits
Développeur Web
Inscription : mai 2006
Messages : 1 045
Détails du profil
Informations personnelles :
Nom : Homme Aurélien Gérits
Âge : 30
Localisation : Belgique

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2006
Messages : 1 045
Points : 498
Points : 498
Avec PHP 5.2 mon exemple me retourne :
Code :
Array ( [0] => Array ( [idmsg] => 1 [0] => 1 [subject] => fds [1] => fds [content] => fd [2] => fd ) )
Avec php 5.3 :
Code :
SQLSTATE[HY000]: General error: mode must be an integer382
Je pense que c'est une erreur ou une adaptation à faire dans la classe.
Le problème c'est que je ne sais ou chercher
Un truc curieux c'est que l'insertion fonctionne normalement
Voila la fonction fetch redéfinie :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
public function fetch($sql,$execute=false,$mode,$debugParams){
		try{
			$prepare = $this->prepare($sql);
			$prepare->setFetchMode($this->setMode($mode));
			$execute ? $prepare->execute($execute) : $prepare->execute();
			$debugParams?$prepare->debugDumpParams():'';
		    $result = $prepare->fetch();
		    $prepare->closeCursor();
		}catch(Exception $e){}
		return $result;
	}
Y a t-il une différence entre le setFetchMode de PHP 5.2 et celui de 5.3 ?
C'est peut être un début

EDIT: C'est bien setFetchMode le fautif
__________________
Au petit déjeuner, je prend du PHP et au souper du jQuery.
AFUP 2009 : Bien optimiser son code pour le référencement
Mon projet open source de librairie PHP 5: magix cjquery
gtraxx 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 14h03.


 
 
 
 
Partenaires

Hébergement Web