Page 1 sur 1

Problème PDO

Posté : 10 janv. 2008, 17:49
par saebakun
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

Posté : 10 janv. 2008, 18:58
par nounet
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.

Posté : 10 janv. 2008, 20:28
par Berzemus
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]

Posté : 10 janv. 2008, 20:33
par Ryle
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 :)

Posté : 25 janv. 2008, 02:06
par x@v
à 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