Class PDO not found

Par DylanVsn, il y a 10 ans


Bonjour a tous, aprés recherche sur le forum j'ai pus trouvé le mémes probléme, mais le sujet et fermer et n'a pas abouti a une réponse :
http://www.grafikart.fr/forum/topics/17768

J'ai le méme soucis, pourtant j'ai tous essayé mais je pense que je doit avoir fait une erreur quelque part,

Database.php :

namespace MineCrown; class Database{ private $db_host = 'localhost'; private $db_name = 'tuto'; private $db_user = 'root'; private $db_pass = ''; private $pdo; public function __construct(){ try{ $this->pdo = new PDO("mysql:host=$this->db_host;dbname=$this->db_name", $this->db_user, $this->db_pass); $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); $this->pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); }catch(Exception $e){ echo '<p><center>Une erreur est survenue lors de la connexion a la basse de données</center></p>'; die(); } } }

Autoloader.php :

namespace MineCrown; class Autoloader{ static function register(){ spl_autoload_register(array(__CLASS__,'autoload')); } static function autoload($class){ if(strpos($class, __NAMESPACE__ .'\\') === 0){ var_dump($class); $class = str_replace('MineCrown\\','',$class); require 'class/'.$class.'.php'; } } }

Index.php :

define("WEBROOT","/dev.minecrown.loc/"); require 'class/Autoloader.php'; \MineCrown\Autoloader::register(); require 'class/Instances.php'; if(!isset($_GET['p'])){ $_GET['p'] = 'index'; } if(!file_exists('pages/'.$_GET['p'].'.php')){ $_GET['p'] = '404'; } if(preg_match("#^[a-zA-Z0-9/-]+$#", $_GET['p'] )){ ob_start(); include 'pages/'.$_GET['p'].'.php'; $content = ob_get_contents(); ob_end_clean(); } include 'templates/default.php';

Et la page instances.php :

<?php namespace MineCrown; $validated = new validated($_POST); $session = new Session(); $db = new Database(); $authentification = new Authentification(); ?>

Je viens vers vous parce que cela fait un moment que je cherche la solution mais rien de fonctionne :/ Merci d'avance a tous de votre aide et bonne journée :)

3 réponses

connected, il y a 10 ans

Bonjour,

dans ta classe Database, rajoute un antislash devant PDO :

new \PDO(...)

Ca devrait le faire :)
Bonne journée.

mxmaxime, il y a 10 ans

Salut,
comme l'a dit @connected ton problème vient de là.
Puisque tu es dans le namespace MineCrown lorsque tu fais new PDO il cherche dans MineCrown\PDO la classe ;)
C'est pareil pour toutes les autres classes que tu essaies d'instancier, c'est pour ça qu'on mets souvent en haut (c'est une des raisons..)

use namespace\delaclass

Là tu peux utiliser :

new \PDO

ou alors tout en haut de ton fichier :

namespace MineCrown; use \PDO;
DylanVsn, il y a 10 ans

J'essayé directement de le mettre sur le new \pdo mais ca ne marché pas et juste en ajoutant ce use tous fonctionne super :) Un grand merci a toi