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

Résolu
chabinot Messages postés 322 Date d'inscription   Statut Membre Dernière intervention   -  
chabinot Messages postés 322 Date d'inscription   Statut Membre Dernière intervention   -
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 322 Date d'inscription   Statut Membre Dernière intervention   16
 
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
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

Hormis le fait que tu aurait éventuellement mal orthographié le nom de ta bdd.. je ne vois pas..
Pourrais tu faire un SHOW DATABASE et nous coller le résultat ?
https://mariadb.com/kb/en/show-databases/

Assures toi aussi que tes fichiers sont bien encodés en UTF8 SANS BOM. histoire de ne pas avoir de caractères cachés qui mettraient le bazar


Au passage :
- rowCount => A n'utiliser QUE pour des requêtes DELETE / INSERT / UPDATE mais en aucun cas pour des requêtes SELECT ( à la place tu pourras faire un COUNT sur le fetchAall )

- Tu dois placer les instructions prepare et execute dans un bloc TRY/CATCH pour voir les éventuelles erreurs.



1
chabinot Messages postés 322 Date d'inscription   Statut Membre Dernière intervention   16
 
Bonjour,
Voilà une capture de show databases:


Cordialement
0