Erreur SQLSTATE[HY000] [1049] Base 'datalib' inconnue

Résolu/Fermé
chabinot Messages postés 321 Date d'inscription mardi 10 novembre 2015 Statut Membre Dernière intervention 22 mars 2024 - 14 nov. 2017 à 11:37
chabinot Messages postés 321 Date d'inscription mardi 10 novembre 2015 Statut Membre Dernière intervention 22 mars 2024 - 15 nov. 2017 à 04:30
Bonjour,
J'essaye de me connecter via pdo à une bse de donnée qui existe bien, mais j'ai l'erreur suivante :'SQLSTATE[HY000] [1049] Base 'datalib' inconnue'.
Voilà mon code :
<?php
// Autoload
require './vendor/autoload.php';

//include 'config.ini';

// Connection à la base de donnéé
$bdd = new Database("localhost", "datalib", "root", "");
    
var_dump($bdd);

J'utilise une classe Database dont voilà le code :
<?php

class Database
{
    
    private $host;
    private $dbname;
    private $user;
    private $pwd;

    private $bdd;
    private $error;

    public function __construct($host, $dbname, $user, $pwd)
    {
         $this->host   = $host;
         $this->dbname = $dbname;
         $this->user   = $user;
         $this->pwd    = $pwd;
        // Set [/contents/698-odbc-open-database-connectivity DSN]
        $dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
        // Set options
        $options = [
                PDO::ATTR_PERSISTENT         => true,
                PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
                PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
        ];
        // Créer une nouvelle instance PDO
        try {
            $this->bdd = new PDO($dsn, $this->user, $this->pwd, $options);
        } // Capture des erreurs
        catch (PDOException $e) {
            $this->error = $e->getMessage();
        }
    }

    public function query($query)
    {
         $this->stmt = $this->dbh->prepare($query);
    }

    public function bind($param, $value, $type = null)
    {
        if (is_null($type)) {
            switch (true) {
                case is_int($value):
                    $type = PDO::PARAM_INT;
                    break;
                case is_bool($value):
                    $type = PDO::PARAM_BOOL;
                    break;
                case is_null($value):
                    $type = PDO::PARAM_NULL;
                    break;
                default:
                    $type = PDO::PARAM_STR;
            }
        }
        $this->stmt->bindValue($param, $value, $type);
    }

    public function execute()
    {
        return $this->stmt->execute();
    }

    public function result()
    {
        $this->execute();
        return $this->stmt->fetchAll(PDO::FETCH_OBJ);
    }

    public function single()
    {
        $this->execute();
        return $this->stmt->fetch(PDO::FETCH_OBJ);
    }

    public function rowCount()
    {
        return $this->stmt->rowCount();
    }

    public function lastInsertId()
    {
        return $this->bdd->lastInsertId();
    }

    public function beginTransaction()
    {
        return $this->bdd->beginTransaction();
    }

    public function endTransaction()
    {
        return $this->bdd->commit();
    }

    public function cancelTransaction()
    {
        return $this->bdd->rollBack();
    }

    public function debugDumpParams()
    {
        return $this->stmt->debugDumpParams();
    }
}

La base datalib existe bien. Je dois signaler que j'utilise MariaDB à la place de MySql.

Merci de me dire où je me suis trompé.
Cordialement

3 réponses

chabinot Messages postés 321 Date d'inscription mardi 10 novembre 2015 Statut Membre Dernière intervention 22 mars 2024 15
15 nov. 2017 à 04:30
Bonjour,
J'ai trouvé, comme j'utilise MariaDB, il fallait juste ajouter dans le DSN le port 3306.
$dsn = 'mysql:host=' . $this->host . ';port=3306,dbname=' . $this->dbname;
Merci encore à tous.
Cordialement
12