Erreur SQLSTATE[HY000] [1049] Base 'datalib' inconnue
Résolu
chabinot
Messages postés
391
Statut
Membre
-
chabinot Messages postés 391 Statut Membre -
chabinot Messages postés 391 Statut Membre -
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 :
J'utilise une classe Database dont voilà le code :
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
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
-
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 -
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.
-