Menu

Erreur SQLSTATE[HY000] [1049] Base 'datalib' inconnue [Résolu]

chabinot 158 Messages postés mardi 10 novembre 2015Date d'inscription 8 juin 2018 Dernière intervention - 14 nov. 2017 à 11:37 - Dernière réponse : chabinot 158 Messages postés mardi 10 novembre 2015Date d'inscription 8 juin 2018 Dernière intervention
- 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
Afficher la suite 

Votre réponse

3 réponses

jordane45 21382 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 12 juin 2018 Dernière intervention - 14 nov. 2017 à 13:08
0
Merci
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/library/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.



Commenter la réponse de jordane45
chabinot 158 Messages postés mardi 10 novembre 2015Date d'inscription 8 juin 2018 Dernière intervention - 14 nov. 2017 à 14:40
0
Merci
Bonjour,
Voilà une capture de show databases:


Cordialement
Commenter la réponse de chabinot
chabinot 158 Messages postés mardi 10 novembre 2015Date d'inscription 8 juin 2018 Dernière intervention - 15 nov. 2017 à 04:30
0
Merci
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
Commenter la réponse de chabinot