PDO2 - Fatal Error : Call to a member function execute() ????

Résolu
roymatthieu Messages postés 112 Date d'inscription jeudi 31 août 2006 Statut Membre Dernière intervention 3 février 2011 - 7 juil. 2009 à 10:33
roymatthieu Messages postés 112 Date d'inscription jeudi 31 août 2006 Statut Membre Dernière intervention 3 février 2011 - 7 juil. 2009 à 10:56
Bonjour à tous,

Je viens de changer de serveur...

La version de php est la "5.1.6".

Le code suivant ne fonctionne plus et je n'y comprends plus rien....

class PDO2 extends PDO{

    private static $_instance;

    public function __construct(){
   
    }
    public static function getInstance(){
   
        if (!isset(self::$_instance)){
           
            try{
                self::$_instance = new PDO('mysql:dbname=db003;host=xxxxx', 'matthieu', 'xxxxx');
            }
            catch(PDOException $e){
                echo $e;
            }
        }
        return self::$_instance;
    }
}

$req     =  'SELECT * FROM mywa_system_setting WHERE sys_setting_id = 1';
$res     =  PDO2::getInstance()->query($req);
$result1 =  $res->fetch(PDO2::FETCH_OBJ);
 
print_r($result1);

echo '<hr />';

$req    =  'SELECT * FROM mywa_system_setting WHERE sys_setting_id = 1';
$res    =  PDO2::getInstance()->query($req);
$result2 =  $res->fetch(PDO2::FETCH_OBJ);

print_r($result2);

J'obtiens bien $result1 mais pas $result2 ???

Fatal Error : Call to a member function fetch() ..... pour la deuxième requête.

Si en changeant les instructions pour la deuxième requête par :

$val    =  array(':id' => 1);
$req    =  'SELECT * FROM mywa_system_setting WHERE sys_setting_id = 1';
$res    =  PDO2::getInstance()->prepare($req);
$res    -> execute($val);
$result2 =  $res->fetch(PDO2::FETCH_OBJ);

J'ai le même problème...  il ne trouve pas la fonction execute();

Ce code fonctionnait très bien sur l'autre serveur dont la verison de php est la "5.2.X" je pense...

Serait-ce un problème de version ?

Merci à vous.

Matt.

1 réponse

roymatthieu Messages postés 112 Date d'inscription jeudi 31 août 2006 Statut Membre Dernière intervention 3 février 2011 1
7 juil. 2009 à 10:56
Ha, j'ai trouvé en cherchant de façon plus approfondie sur le net...

Je vais pas faire toute l'explication car comme toute erreur, c'est con et compliqué... mais il suffit de changer le ligne :

self::$_instance = new PDO('mysql:dbname=db003;host=xxxxx', 'matthieu', 'xxxxx');

par

self::$_instance = new PDO('mysql:dbname=db003;host=xxxxx', 'matthieu', 'xxxxx', array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true));

et ça fonctionne nikel...

Merci à moi...
Merci à vous...
Merci au web...

et merci à Michael Jackson pour sa musique... 
3
Rejoignez-nous