Signaler

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

Posez votre question chabinot 67Messages postés mardi 10 novembre 2015Date d'inscription 15 novembre 2017 Dernière intervention - Dernière réponse le 15 nov. 2017 à 04:30 par chabinot
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
Utile
+0
plus moins
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.



Donnez votre avis
Utile
+0
plus moins
Bonjour,
Voilà une capture de show databases:


Cordialement
Donnez votre avis
Utile
+0
plus moins
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
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !