Connexion base de donnée mysql avec php en orienté objet
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je me permet de poster mon petit problème que je ne comprend pas d'où cela peut provenir.
J'ai mon site internet qui ne veut pas se connecter à ma base de données pourtant de mon point de vue j'ai l'impression que tout est bien codé.
Je vous joins mon code et l'erreur.
L 'erreur est : Fatal error: Uncaught Error: Call to a member function prepare() on null in C:\Users\Gaetan GIBERT\Desktop\atelier-isabelle-main\Model\Manager\CategoryManager.php:18 Stack trace: #0 C:\Users\prog\Desktop\atelier-main\View\visitor\shop\category.view.php(7): Model\Manager\CategoryManager->getCategories() #1 C:\Users\prog\Desktop\atelier-main\Controller\Feature\RenderViewFeature.php(12): require_once('C:\\Users\\prog...') #2 C:\Users\prog\Desktop\atelier-main\Controller\ShopController.php(11): Controller\ShopController->render('shop/category', Array) #3 C:\Users\prog\Desktop\atelier-main\index.php(150): Controller\ShopController->showShop() #4 {main} thrown in C:\Users\prog\Desktop\atelier-main\Model\Manager\CategoryManager.php on line 18
Alors je sais que ce message stipule que cela renvoie null dans le prepare mais ce que je comprend pas c'est que sur d'autres PC et d'autres projet exactement le même code fonctionne d'après mes déductions que je pense c'est que la connexion à ma base de données chez Hostinger ne s'alimente pas. Ce qui me retourne une valeur nulle.
Voici mon code :
<?php namespace Model; use Model\Manager\Feature\ManagerFeature; use PDO; use PDOException; class ConnectBDD{ private string $host = "host"; private string $database = "database_name"; private string $userDataBase = "user"; private string $passwordDataBase = "pass"; private static ?PDO $db = null; public function __construct() { try { self::$db = new PDO("mysql:host=$this->host;dbname=$this->database;charset=utf8", $this->userDataBase, $this->passwordDataBase); self::$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); self::$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); return self::$db; }catch (PDOException $exception){ return $exception->getMessage(); } } public static function instance(): ?PDO{ if(is_null(self::$db)){ new self(); } return self::$db; } public function __notDuplicate(){} }
Est-ce que quelqu'un aurait une solution svp ?
Windows / Chrome 107.0.0.0
- Connexion base de donnée mysql avec php en orienté objet
- Gmail connexion - Guide
- Base de registre - Guide
- Connexion chromecast - Guide
- Vente objet occasion entre particulier - Guide
- Site inaccessible n'autorise pas la connexion - Guide
Bonjour jordane45, merci de ton aide, oui effectivement j'ai zappé de mettre le code.
Voici mon code de CategoryManager.
La ligne 18 c'est :
Par contre cela me fait le même problème sur la page de connexion, inscription et toute les pages qui appelle la classe connectBDD.
J'ai tenté sur l'ordinateur de chez moi tout fonctionne parfaitement. Mais pas sur mon ordi du boulot.
Je précise que la base de donnée est sur Hostinger avec un accès à tous et pas qu'à une simple adresse IP.
Le message d'erreur "Call to a member function prepare() on null" t'indique, en effet, que $this->db est vide.
Bonjour yg_be, merci de ton aide.
ça je comprend bien j'ai regardé déjà plusieurs tuto mais ce que je voudrais savoir c'est comment savoir si la connexion à la bdd fonctionne car là j'ai exactement le même code qui fonctionne sur le PC perso mais pas sur le PC pro.
Mon pc perso tout fonctionne super bien (et je précise tout est exactement pareil niveau code)
Mon pc du boulot me fait cette fameuse erreur
Ma base de donnée elle est héberger sur hostinger et est partagé sur tout le monde. Le mot de passe l'user et la database sont correct j'ai fait des copiers coller pour être sur que les deux soit bon.
Sauf que là cela me fait une erreur sur internet cela dit de partout que c'est car cela renvoie du contenu vide d'accord mais pourquoi cela fonctionné encore il y a quelques jours et là plus rien sur mon pc boulot avec n'importe quel de mes projets qui ont une base de données.
Comme si l'ordinateur du travail me bloqué l'accès à la BDD alors que j'arrive à aller sur phpmyadmin.
Tu fais tourner le code PHP sur ton PC du travail, plutôt que sur le serveur hébergé?
Peut-être, en effet, que le PC du travail, ou le réseau au travail, ne te permet pas de te connecter via la porte 3306 à la base de données.
Quand tu utilises phpmyadmin, je suppose que tu as un navigateur qui se connecte à ton serveur web, pas à la base de données.
Han d'accord oui ça peut être ça effectivement et serais-tu comment faire pour voir si j'ai accès au port 3306 stp ? Et comment l'activer si je n'ai pas d'accès. Merci en tout cas de tes réponses.