Instance de BDD dans une classe qui cause une exception
bonjour à tous,
je n' arrive pas à résoudre mon problème je viens donc vers vous afin de trouver la solution ...
j'instancie ma bdd dans une classe, mais cela provoque une exception de ce type :
Citation:
Fatal error: Exception thrown without a stack frame in Unknown on line 0
j'ai commenté plusieurs parties de ma classe pour trouver d'ou vient le probleme, et cette exception disparait quant je commente la ligne qui instancie la bdd ...
voici le code de al classe :
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 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
|
<?php
class SessionManager
{
// ------------------------ ATTRIBUTS -----------------------------------
private $db;
private static $compteur = array();
// ------------------------ METHODES -----------------------------------
// GETTERS
public static function getCompteur()
{
return self::$compteur;
}
// SETTERS
private static function setCheckSession($valeur)
{
self::$compteur[$valeur] = 1;
}
private function setCompteur($value)
{
self::$compteur[$value] = 0;
}
public function setDb(PDO $bdd)
{
$this->db = $bdd;
}
// Public
public function __construct(PDO $bdd)
{
$this->setDb($bdd);
try // Requetes
{
$attr = $this->db->query('SELECT * FROM secteurs');
$q = $this->db->query('SELECT * FROM formulaires
INNER JOIN secteurs ON secteurs.id_secteur = formulaires.id_sect
WHERE etat = \'En cours\'');
}
catch(Exception $e)
{
die('Erreur: '.$e->getMessage());
}
while($attribut = $attr->fetch(PDO::FETCH_OBJ)) // creation et affectation de l' attribut compteur
{
$this->setCompteur($attribut->nom_secteur);
}
while($ses=$q->fetch(PDO::FETCH_OBJ)) // Recherche des sessions en cours pour creation d'objet !!
{
$_SESSION[$ses->nom_secteur] = new Session($ses);
self::setCheckSession($ses->nom_secteur);
}
}
public function listeSession() // Listage du statut de toutes les sessions
{
foreach(self::getCompteur() as $key=>$value)
{
if($value)
{
echo 'Vous avez une session '.$_SESSION[$key]->getNomSecteur().' en cours, son ID est <a href="session.php?secteur='.$_SESSION[$key]->getNomSecteur().'">'.$_SESSION[$key]->getIdFormulaire().'</a><br />';
}
else
{
echo ' il n\'y a pas de session '.$key.' en cours.<br />';
}
}
}
public function create($nom)
{
if(isset($_SESSION[$nom]))
{
//echo 'Une session '.$nom.' existe déjà';
return $_SESSION[$nom];
}
else
{
$idSect = $this->db->query('SELECT id_secteur FROM secteurs WHERE nom_secteur = '.$nom)->fetchColumn();
$infoSes = $this->db->prepare('INSERT INTO formulaires SET id_sect = :id_sect, date_session = :date_session, etat = :etat');
$infoses->bindValue(':id_sect', $idSect, PDO::PARAM_INT);
$infoses->bindValue(':date_session', time());
$infoses->bindValue(':etat', 'En cours');
$infoses->execute();
$idSes = lastInsertId($this->db);
$q = $this->db->query('SELECT * FROM formulaires
INNER JOIN secteurs ON secteurs.IDsect = formulaires.ID_sect
WHERE IDform = '.$idSes)->fetch(PDO::FETCH_OBJ);
return new Session($q);
}
}
public function delete($nom)
{
}
public function modify($nom)
{
}
}
?> |
voici le début de la page qui lance la création de classe :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
<?php
session_cache_limiter('private_no_cache');
session_start();
include('commun/php_fonctions.php');
$bdd = db_connect('localhost','base test','David','********',array()); // Connection à la BDD sauve trade
function chargerClasse($classe) // Auto load de la classe à creer
{
require 'class/'.$classe.'.class.php';
}
spl_autoload_register('chargerClasse'); // Ajout de la classe dans la pile d'autoload
$_SESSION['SM'] = new SessionManager($bdd);
?> |
et voici le fichier 'php_fonctions.php'
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
<?php
function db_connect($host,$db,$name,$pass,$options)
{
try
{
$bdd = new PDO('mysql:host='.$host.';dbname='.$db, $name, $pass, $options);
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
}
catch(exception $e)
{
die('erreur :'.$e->getMessage());
}
return $bdd;
}
?>
pouvez vous m'eclaircir sur la raison du probleme et comment le corriger svp?
mercid 'avance :) |