IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

le script de connexion PDO de rawsrc


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 384
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut le script de connexion PDO de rawsrc
    Bonjour,
    pour une connexion PDO, j'ai utilisé le script de rawsrc :

    classes/PDO.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    ?php
     
    declare(strict_types=1);
     
    namespace classes\PDO;
     
    /**
     * TUTORIAL DVP SUR LE CONCEPT MVC : MODÈLE-VUE-CONTRÔLEUR
     * @link https://www.developpez.net/forums/blogs/32058-rawsrc/b7786/developpement-selon-l-approche-mvc-modele-vue-controleur-retour-theorie/
     * @link https://www.developpez.net/forums/blogs/32058-rawsrc/b7804/developpement-selon-lapproche-mvc-modele-vue-controleur-cas-pratique/
     */
    class PDO
    extends \PDO
    {
        /**
         * @var \PDO
         */
        private static $pdo = null;
     
        public function __construct()
        {
            if (self::$pdo === null) {
                self::connect();
            }
            return self::$pdo;
        }
     
        /**
         * @param  string scheme     Ex: mysql pgsql...
         * @param  string $host      Adresse IP du serveur
         * @param  string $database  Nom de la base de données
         * @param  string $user      Nom de l'utilisateur
         * @param  string $pwd       Mot de passe de la connexion
         * @param  string $port      Numéro du port pour la connexion
         */
        private static function connect(string $scheme = DB_SCHEME, string $host = DB_HOST, string $database = DB_NAME,
                                        string $user = DB_USER, string $pwd = DB_PWD, string $port = DB_PORT)
        {
     
            $dsn = "{$scheme}:host={$host};dbname={$database};";
     
            if ((int)($port)) {
                $dsn .= "port={$port};";
            }
     
            try {
                self::$pdo = new \PDO($dsn, $user, $pwd, [
                    \PDO::ATTR_ERRMODE            => \PDO::ERRMODE_EXCEPTION,
                    \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
                    \PDO::ATTR_EMULATE_PREPARES   => false
                ]);
            } catch (\PDOException $e) {
                throw $e;
            }
        }

    connectdb.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    define('DB_SCHEME','mysql');
    define('DB_HOST','localhost');
    define('DB_NAME','tickets');
    define('DB_PORT','3306');
    define('DB_USER','root');
    define('DB_PWD','');
    include("classes/PDO.php");
    use classes\PDO;
    $pdo=new PDO();
    var_dump($pdo);

    ArgumentCountError: PDO::__construct() expects at least 1 parameter, 0 given in C:\wamp64\www\ticket\connectdb.php on line 10
    C'est quoi ce message d'erreur alors que __construct() n'attend aucun argument ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour Laurent,

    tu ne pourras pas progresser si tu restes en PHP 5.3.

    Tous les scripts de rawsrc utilisent au moins PHP 7.

  3. #3
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Le manuel PHP indique pourtant bel et bien qu'au moins un argument est obligatoire : $dsn

    https://www.php.net/PDO.construct

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public PDO::__construct ( string $dsn [, string $username [, string $passwd [, array $options ]]] )

  4. #4
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 384
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Bonjour Jérôme,

    renseignements pris, mon hébergeur (Evxonline) installera prochainement sur ses serveurs PHP 7.2 (pas encore fait) et donc je suis actuellement en 5.6 (pas 5.3). Par contre, là, je fais un essai en local (sur mon Wamp) et suis donc en 7.3.5....
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  5. #5
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 384
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    @darkstar : le constructeur sans argument est celui de la classe héritée de PDO par contre l'appel du constructeur de PDO contient 4 arguments :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    self::$pdo = new \PDO($dsn, $user, $pwd, [
                    \PDO::ATTR_ERRMODE            => \PDO::ERRMODE_EXCEPTION,
                    \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
                    \PDO::ATTR_EMULATE_PREPARES   => false
                ]);
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  6. #6
    Invité
    Invité(e)
    Par défaut
    Laurent,

    MONTRE le "script de connexion PDO de rawsrc" (URL du tuto)

  7. #7
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 384
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    J'ai fait une petite erreur : Evxonline a déjà installé PHP 7.2 et prochainement ils installeront 7.3 (puis 7.4 quand il sera sorti).

    Je profite, Jérôme, de ton intervention sur PHP 7 : (aparté car ça n'a rien à voir avec cette discussion) je t'ai posé la question de passer mon site VHS de 5.6 à 7 ; qu'en penses-tu d'un point de vue compatibilité (des plugins vu que le thème, lui, est compatible) ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  8. #8
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Rebonjour Laurent,

    J'ai trouvé ! C'était pourtant simple :-)

    Ton fichier connectdb.php n'a pas de namespace !!!

    Du coup, quand tu appelles "new PDO()" tu appelles la version de PHP et non ta classe ;-)

    Tu dois écrire new \classes\PDO\PDO();


    EDIT :
    Par contre, je te déconseille l'utilisation d'un define en tant que valeur par défaut dans les paramètres d'une méthode
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private static function connect(string $scheme = DB_SCHEME, string $host = DB_HOST, string $database = DB_NAME,
                                        string $user = DB_USER, string $pwd = DB_PWD, string $port = DB_PORT)

    Si pour une raison X ou Y, ton fichier qui défini tes variables n'est pas chargé, tes variables ne sont pas FALSE ou NULL mais bien un string du define
    Par exemple $scheme vaudra 'DB_SCHEME' de type "string donc

  9. #9
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 384
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Je viens seulement de lire ton post #6 Jérôme : https://www.developpez.net/forums/bl...-cas-pratique/. Le code du script de connexion n'y est pas ; pour l'avoir, il faut télécharger le zip : https://www.developpez.net/forums/at...4&d=1571074115
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  10. #10
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Petit erratum de ma réponse :

    Je n'avais pas fait attention au "use" défini dans ton fichier dbconnect.php
    Je n'ai pas testé mais je pense que tu dois quand même appeler "new PDO\PDO();"

  11. #11
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 384
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Mon fichier connectdb contient certes pas de namespace mais contient use : use classes\PDO; ce qui devrait convenir. Cependant, j'ai essayé ton code : $pdo=new \classes\PDO\PDO(); et du coup, ça marche mais je ne comprends pas pourquoi le use n'allait pas...
    Si je viens de trouver
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    use classes\PDO\PDO;
    //$pdo=new \classes\PDO\PDO();
    $pdo=new PDO();
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/04/2006, 09h00
  2. Script de connexion rsh avec ksh
    Par apocalypse dans le forum Linux
    Réponses: 2
    Dernier message: 23/04/2006, 23h43
  3. [MySQL] Script de connexion, je ne sais pas ce qui bugge
    Par gogogame dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 21/04/2006, 14h18
  4. [MySQL] mauvais script de connexion
    Par covin85 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/04/2006, 13h18
  5. script de connexion par ssh
    Par black_code dans le forum Modules
    Réponses: 2
    Dernier message: 25/07/2005, 15h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo