Page 1 sur 1

problème include et PDO

Posté : 25 janv. 2007, 15:14
par kroun
Bonjour,

Pour mon site, j'utilise PDO pour intéragir avec MYSQL. J'ai donc créer un fichier connexion que j'inclus dans chaque page pour récupéré diverses données dans ma base (jusqu'ici tout va bien). En local tout fonctionne bien, les requêtes sont bien exécutées. Je transfert mon site chez l'hébergeur, et là, plus un seul script ne marche.

Après plusieurs test, je me rend compte que c'est uniquement si j'utlise include_once ou require_once que cela ne marche pas. Autrement dit, avec include() et require() ca fonctionne. Enfin, je suis obligé de faire un include devant chaque requête sql pour que cela fonctionne. Je ne comprend pas pourquoi cette différence, si quelqu'un pouvait m'expliquer.
<?php	
// appel du fichier de config

include('admin/inc/connexion.inc.php');
	if(isset($_GET['id']))
	{
		$id = (int) $_GET['id'];
    //création de la requête SQL
    $sql = "SELECT libel_categ FROM categ_prod WHERE id_categ=$id";
   	//exécution de la requête SQL
		$sth = $dbh->query($sql);
		$result = $sth->fetchAll();
		//boucle de l'ensemble de l'enregistrement
		foreach ($result as $row){
		echo '<h3 class="titrecateg">'.$row['libel_categ'].'</h3>';
		}
include('admin/inc/connexion.inc.php');
		//création de la requête SQL
		$sql = "SELECT id_prod, image_prod FROM liste_prod WHERE categ_prod=$id";
		
		//exécution de la requête SQL
		$sth = $dbh->query($sql);
		$result = $sth->fetchAll();
		
		
		//boucle de l'ensemble de l'enregistrement
		foreach ($result as $row){
			$id_produit = $row['id_prod'];
			$image_produit = $row['image_prod'];	
			
			//Affichage de la liste des produits de la catégorie choisi

		 	echo '<a href="fiche_prod.php?id='.$id_produit.'"><img class="prod" src="img/img_prod/'.$image_produit.'" /></a>';
		}			

Posté : 27 janv. 2007, 19:04
par kroun
Bon après pas mal de réflexion et d'arrachage de cheveux, ca fonctionne.

Pour plusieurs scripts, cela venait de mes requêtes complexes qui avaient des erreurs de synthaxe. :oops:

Par contre, je ne m'explique toujours pas le fait de devoir mettre un include de mon fichier de connexion devant chaque requête.

Je découvre PDO, donc cela vient peut être de mon fichier de connexion ?

connexion.inc.php
<?php
	define('USER1', 'mon_login');
	define('PASS1', 'mon_pass');
	define('DSN1', 'mysql:host=localhost;dbname=ma_base');
	try {
		$dbh = new PDO(DSN1, USER1, PASS1);
	} catch (PDOException $e) {
	print "Erreur ! : " . $e->getMessage() . "<br />";
	die();
	}
?>

Posté : 07 févr. 2007, 16:08
par gectou4
j'ai constaté cela aussi mais uniquement dans des cas très précis comme la redéfinition de session_gc et sessison_write.

J'ai pus controuner le problème ne instanciant pdo d'un fichier inclut dans le dossier courant (ou un sous dossier du dossier courant mais pas un dossier supérieur; ça ne marchera pas si on rmeonte d'un repertoire)

je me retourne (en passant le try/ctach avec un $pdo = new pdo(...)

Ensuite j'appel l'objet $pdo à chaque instance de class via les global
__custruct(){
global $pdo;
this->pdo = $pdo;
}
Ce qui me donne des query dans mes méthodes équivalente à :
$this->pdo->query();
Si dans certains points clef tu rencontre des problèmes vérifie que :

en effet je dois uniquement faire des $pdo->query() car en cas de deux $pdo->execute() le deuxième ne marche pas.

Attention ausis si tu utilises la même variable de retour de résultat :
$result = $pdo->query()
il faudra la mettre à null ou la unset
$result = null;
$result = $pdo->query()
Curieusement autrement ça plantait également -_-'

Pour rappel PDO tend à être plus stable mais est promise à évolution il faudrat donc veiller aux mise à jours...