Problème PDO

Eléphant du PHP | 119 Messages

10 janv. 2008, 17:49

Bonjour,

j'ai devellopé un site sur mon poste avec WAMP5 et j'utilise PDO pour mes connection vers un mysql

Jusque là tout va bien :)

Par contre j'ai dûe mettre ma prog sur le serveur de production qui lui utilise Win2003 avec IIS donc plus de WAMP

Et là j'ai des erreurs PDO:

Code : Tout sélectionner

Fatal error: Call to a member function fetchAll() on a non-object
J'ai bien recopié ma base elle apparait niquel dans le phpmyadmin, j'ai même essayé de modifier mon mot de pass de login dans la config de connexion vers mysql et si le mot de passe est mauvais il m'indique bien une erreur.

Si je met un nom de base bidon il me met une erreur aussi et si je met un mauvais user j'ai aussi une erreur.

Donc il reconnait bien tout ça ....

j'ai ça en code:
GLOBAL $connexion;
try{
	
 $connexion = new PDO("mysql:host=localhost;dbname=basecible", "root", "root");
 
}catch(Exception $e){
 echo 'Erreur : '.$e->getMessage().'<br />';
 echo 'N° : '.$e->getCode();
}

function sql($query){
	GLOBAL $connexion;
	$resultats=$connexion->query($query);
	$data=$resultats->fetchAll(PDO::FETCH_ASSOC);
	return $data;
	$resultats->closeCursor();
	$connexion = NULL;
}

function sql_exec($query){
	GLOBAL $connexion;
	if($resultats=$connexion->exec($query) === FALSE){
	$data=false;
	}else{
	$data=true;
	}
	return $data;
	$resultats->closeCursor();
	$connexion = NULL;
}
Et quand je fais un
sql('une requete');
il me dit que j'ai une erreur sur la ligne

Code : Tout sélectionner

$resultats=$connexion->query($query);
Merci

nounet
Invité n'ayant pas de compte PHPfrance

10 janv. 2008, 18:58

commence par ne pas redefinir ton global $connexion car le propre d'etre global c'estjustement d'etre disponible depuis n'importe quel fonction si tu le redefinis il pert sa connection.

d'autre part ,essaye a cemoment la de copier ta premier eligne de connection dans ta premiere fonction ,ca devrait mieux marcher.

ViPHP
ViPHP | 4039 Messages

10 janv. 2008, 20:28

S'il ne mettait pas global $connexion au début de ses fonctions, il ne pourrait accéder à la variable globale. (petit lien)

Pour te répondre, est-ce que tu sais si les les plugins nécessaires à pdo sont activés sur ton serveur de prod ?[/url]
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

10 janv. 2008, 20:33

Il y a effectivement un petit malentendu sur le global (un peu mélangé avec la notion de static par nounet) mais le problème vient sans doute bien de là : au premier appel à sql_exec() ou sql(), tu vas écraser la connexion que tu as ouverte au début avec la valeur NULL. Du coup, au second appel à ces fonctions, tu n'auras plus l'instance de PDO dans $connexion et tu ne pourras plus appeler de méthode dessus :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

x@v
Mammouth du PHP | 570 Messages

25 janv. 2008, 02:06

à mon avis tes fonctions peuvent être améliorés.
Transactions et requete préparé sont quand exceptionnelle pour la persistence en terme de sécurité et rapidité.
http://fr3.php.net/manual/fr/ref.pdo.php