Bonjour,

Voila je rencontre un petit problème avec mon code. Quand j'essaie de me connecter à ma base de donnée avec le PDO une erreur apparait

Warning: require(/home/dbgamesf/public_html/php/classes/PDO.php): failed to open stream: No such file or directory in /home/dbgamesf/public_html/php/auto-load.php on line 9

Fatal error: require(): Failed opening required '/home/dbgamesf/public_html/php/classes/PDO.php' (include_path='.:/opt/cpanel/ea-php72/root/usr/share/pear') in /home/dbgamesf/public_html/php/auto-load.php on line 9

À la ligne 9 j'ai ça :

function __autoload($class) {
    require $_SERVER['DOCUMENT_ROOT'].'/php/classes/'.str_replace('\\', '/', $class).'.php'; // ligne 9
}

Et la où je demande le PDO j'ai :


namespace MySQL;

use \PDO;

/*
* Class DataBase
* Permet de se connecter et d'exécuter des requettes SQL dans une base de données MySQL en utilisant le PDO 
*/
class DataBase {

    /*
    * @var string Nom de la base de données
    */
    private $db_name;

    /*
    * @var string Nom d'utilisateur pour se connecter à la base de données
    */
    private $db_user;

    /*
    * @var string Mot de passe pour se connecter à la base de données
    */
    private $db_pass;

    /*
    * @var string L'hôte de connexion à la base de données
    */
    private $db_host;

    /*
    * @var int Port de connexion à la base de données
    */
    private $db_port;

    /*
    * @var PDO Stockage du PDO, connexion base de données
    */
    private $pdo;

    /*
    * @param string $db_name Nom de la base de données
    * @param string $db_user Nom d'utilisateur pour se connecter à la base de données
    * @param string $db_pass Mot de passe pour se connecter à la base de données
    * @param string $db_host L'hôte de connexion à la base de données
    */
    function __construct(string $db_name, int $db_port = 3306, string $db_user = 'root', string $db_pass = 'root', string $db_host = 'localhost'){
        $this->db_name = $db_name;
        $this->db_user = $db_user;
        $this->db_pass = $db_pass;
        $this->db_host = $db_host;
        $this->db_port = $db_port;  
    }

    /*
    * @return PDO
    */
    private function getPDO(){
        if ($this->pdo === null) {
            try {
                $pdo = new PDO('mysql:dbname='.$this->db_name.';host='.$this->db_host.':'.$this->db_port, $this->db_user, $this->db_pass);
                $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            } catch (Exception $e) {

                die('Une erreur est survenue lors de la connexion à la base de données.');
            }
            $this->pdo = $pdo;
        }
        return $this->pdo;
    }

    /*
    * @param string $statement La requette SQL à exécuter
    * @param array $values Si la requette comporte des valeurs en '?' (ou autre), ce sont ces valeurs qui sont entrées dans ce tableau, dans l'ordre des '?' (ou autre) de la requette SQL.
    * @param boolean $returns Retourne oui ou non des choses
    * @return array
    */
    public function prepare($statement, array $values = array(), bool $returns = false){
        $req = $this->getPDO()->prepare($statement);
        $req->execute($values);

        if ($returns === true) {
            $data = $req->fetchAll();
            $rowCount = $req->rowCount();
            $fetch = $req->fetch();

            $newdata['fetchAll'] = $data;
            $newdata['rowCount'] = $rowCount;
            $newdata['fetch'] = $fetch;

            return $newdata;
        } else {
            return true;
        }
    }
}

Je ne comprends pas pouvez-vous m'aider?!

14 réponses


Warzik
Réponse acceptée

Salut, je t'invite à aller te renseigner vers spl_autoload_register(), regarde:

<?php
// Ancienne version, obsolète depuis PHP 7.2
// function __autoload($class) {
//     include 'classes/' . $class . '.class.php';
// }

// Méthode conseillée 
function my_autoloader($class) {
    include 'classes/' . $class . '.class.php';
}

spl_autoload_register('my_autoloader');

Grafikart a d'ailleurs fait une vidéo dessus:
https://www.grafikart.fr/formations/programmation-objet-php/autoload

En espérant t'avoir aidé.

salut,
visiblement, le fichier "/home/dbgamesf/public_html/php/classes/PDO.php" n'existe pas ;)

@plus
Pierre

Oui ça je l'ai bien vu, mais je ne comprend pas pourqoi il essaie de m'inclure ce fichier alors que je veut la classe PDO de php

Bonsoir,
Enlève le \ devant PDO

Fonctionne pas :'(

salut
il essaye de l'inclure tout simplement parce que tu lui demande ;)

require $_SERVER['DOCUMENT_ROOT'].'/php/classes/'.str_replace('\', '/', $class).'.php'; // ligne 9

@plus
Pierre

Eh bien dit moi comment inclure la classe PDO de php alors stp?

ta classe est dans quel fichier ?
et dans quel répertoire ?

@plus
Pierre

Je n'en sais rien x) C'est le truc pour se connecter à une base de donées, c'est tout ce que je veux x)

salut,
Tu n'en sais rien et moi je devrais le savoir ?????
Désolé, sans boule de christal, j'peux rien faire ;)

@plus
Pierre

Hello,
Tu n'as rien à inclure pour utiliser une extension de php comme PDO, tu peux t'en servir directement.

Oui je sais ça, mais je ne comprends pas pourquoi en php7.2 il me fait ce bug alors que en php7.1 il n'essaie pas d'inclure un fichier, il n'y a que en php7.2 qu'il tente que m'inclure le fichier.

en php 7.2 __autoload n'existe plus !!!

Ah, y'a-t-il un moyen de le remplacer?