begin process at 2012 05 28 20:43:01
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Base de données

 > 

MySQL

 > 

classe de connection PDO : tester si une base existe


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

classe de connection PDO : tester si une base existe

lundi 30 janvier 2012 à 23:58:16 | classe de connection PDO : tester si une base existe

555clR

Bonsoir,
J'essaie désespérément de tester si une base de données existe... mais je ne vois pas comment faire pour me servir des erreurs 'catchées'. J'utilise pour me connecter à ma base la classe PDO, avec un singleton.
Inutile de préciser que je débute de chez je débute.
Merci de votre aide.
ClR
mardi 31 janvier 2012 à 09:06:36 | Re : classe de connection PDO : tester si une base existe

cod57


bonjour

http://php.net/manual/fr/pdo.connections.php

Tapez le texte de l'url ici.


Code PHP :
<?php
// Exemple #1 Connexion Ó MySQL


$host='localhost';
$user='root';
$pass='';
$base='test';
$table='eleve';





$dbh = new PDO('mysql:host='.$host.';dbname='.$base, $user, $pass);

try {
    
    $dbh = new PDO('mysql:host='.$host.';dbname='.$base, $user, $pass);
    
    echo 'vous êtes connecté !<br>';
    
    $dbh = null;
}

      catch (PDOException $e) {
          print "Erreur vous êtes non connecté ! erreur en cours : " . $e->getMessage() . "<br/>";
          die();
      }



// S'il y a des erreurs de connexion, un objet PDOException
// est lancÚ. Vous pouvez attraper cette exception si vous
// voulez gÚrer cette erreur, ou laisser le gestionnaire 
// global d'exception dÚfini via la fonction set_exception_handler() la traiter.

//Exemple #2 Gestion des erreurs de connexion

try {
    $dbh = new PDO('mysql:host='.$host.';dbname='.$base, $user, $pass);
    foreach($dbh->query('SELECT * from '.$table) as $row) {
    
    echo '<pre>';
    print_r($row);
    echo '</pre>';
    }
    $dbh = null;
} catch (PDOException $e) {
    print "Erreur !: " . $e->getMessage() . "<br/>";
    die();
}
?>



question : que veux tu faire avec le singleton !
peux on voir ton code



Bonne programmation !
mardi 31 janvier 2012 à 12:55:55 | Re : classe de connection PDO : tester si une base existe

555clR

Bonjour...
Finalement je me suis débrouillée comme ça, mais je ne sais pas si ça peut se faire ainsi. J'ai fait une méthode sans les paramètres de la base, ce qui me permet de vérifier si elle existe, comme ça :
Code PHP :
$pdo = PDO2::getBase();
	$requete = 'CREATE DATABASE IF NOT EXISTS '.DBNAME.' DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci';
	$teste = $pdo->prepare($requete)->execute();
	//si connexion impossible, db existe pas
		if($teste === true)
		{
//creation de base et tables associées
}
		else
			die();


J'ajoute juste avant de mettre ma classe singleton que cette page et cette fonction ne servent qu'une fois.
et le singleton... pour n'avoir qu'une connexion

<?php
//SINGLETON PR PDO
class PDO2 extends PDO
{
private static $_instance;

/* CONSTRUCTEUR : héritage public obligatoire par héritage de PDO */
public function __construct( )
{
}
// End of PDO2::__construct() */

/* SINGLETON : getInstance */
public static function getInstance()
{
if (!isset(self::$_instance))
{
try
{
//CONNEXION
self::$_instance = new PDO(DSN, USER, PASSWORD);
}
catch (PDOException $e)
{
print 'Erreur : '.$e->getMessage().'<br />';
echo 'N° : '.$e->getCode().'<br />';
echo 'Ligne n° : '.$e->getLine();
die();
}
}
return self::$_instance;
}
// End of PDO2::getInstance() */

/* getBase */
public function getBase()
{
try
{
//CONNEXION
$instance = new PDO(DRIVER.':host='.HOST, USER, PASSWORD,
array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch (PDOException $e)
{
print 'Erreur : '.$e->getMessage().'<br />';
echo 'N° : '.$e->getCode().'<br />';
echo 'Ligne n° : '.$e->getLine();
die();
}
return $instance;
}
}

merci de ton aide. :)
mardi 31 janvier 2012 à 16:14:28 | Re : classe de connection PDO : tester si une base existe

TychoBrahe

Salut,

Je me permet de préciser que, dans le cas de MySQL uniquement, tu peux interroger la base information_schema afin d'avoir ton information. A noter que tu peux le faire bien que tu utilises une autre base. Voici un exemple qui retourne la liste de toutes les tables de la abse de donnée actuellement utilisée :

SELECT `TABLE_NAME` FROM `information_schema`.`TABLES` WHERE `TABLE_SCHEMA` = DATABASE();


J'insiste lourdement sur le fait que ceci est spécifique à MySQL (et assimilés) et ne saurait s'appliquer aux autres sgbdr.

et le singleton... pour n'avoir qu'une connexion


Perso je pense que ce soit une bonne idée. Il n'est pas impossible de devoir travailler avec plusieurs bases de données différentes simultanément, situés sur différents serveurs. Certes, en arriver là n'est pas si très fréquent et peut être la conséquence d'un mauvais design, mais ce n'est pas impossible.
mardi 31 janvier 2012 à 17:33:02 | Re : classe de connection PDO : tester si une base existe

555clR

Bonjour et merci de votre aide et de vos conseils.
La question me taraude quand même... on peut faire ce que je fais là ?? je veux dire... ça se fait ? (ça me paraît un peu lourdos mais je n'ai pas su faire autrement)
(et désolé pour les balises php manquantes tout à l'heure...)

Code PHP :
<?php
//SINGLETON PR PDO
class PDO2 extends PDO
{
private static $_instance;

/* CONSTRUCTEUR : héritage public obligatoire par héritage de PDO */
public function __construct( )
{
}
// End of PDO2::__construct() */

/* SINGLETON : getInstance */
public static function getInstance()
{
if (!isset(self::$_instance))
{
try
{
//CONNEXION
self::$_instance = new PDO(DSN, USER, PASSWORD);
}
catch (PDOException $e)
{
print 'Erreur : '.$e->getMessage().'<br />';
echo 'N° : '.$e->getCode().'<br />';
echo 'Ligne n° : '.$e->getLine();
die();
}
}
return self::$_instance;
}
// End of PDO2::getInstance() */

/* getBase */
public function getBase()
{
try
{
//CONNEXION
$instance = new PDO(DRIVER.':host='.HOST, USER, PASSWORD,
array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch (PDOException $e)
{
print 'Erreur : '.$e->getMessage().'<br />';
echo 'N° : '.$e->getCode().'<br />';
echo 'Ligne n° : '.$e->getLine();
die();
}
return $instance;
}
} 
mardi 31 janvier 2012 à 17:44:12 | Re : classe de connection PDO : tester si une base existe

TychoBrahe

on peut faire ce que je fais là ?? je veux dire... ça se fait ? (ça me paraît un peu lourdos mais je n'ai pas su faire autrement)


Personnellement non. Faire une classe qui hérite de PDO afin de se simplifier la vie compte tenu de l'environnement d'accord, mais là en l'occurrence tu ne te simplifie rien du tout, bien au contraire.

Après il y a deux choses que tu fais qui ne se font vraiment pas :
1. Afficher l'erreur à l'utilisateur. Loger les erreur ok, c'est très bien, mais l'utilisateur final ne doit avoir aucune connaissance du détail de l'erreur, on se contente de lui en envoyer une générique.
2. Mélanger l'objet et l'impératif. Essaye donc de faire un choix, l'un ou l'autre, mais pas les deux stp.
mardi 31 janvier 2012 à 18:58:19 | Re : classe de connection PDO : tester si une base existe

555clR

Par rapport au point 1, il vaudrait mieux que je fasse ça ?
try
{
//...
}
catch (PDOException $e)
{
$e;
}
pour le second point je ne vois pas ce que tu veux dire...
merci de ton aide en tous les cas
Claire
mardi 31 janvier 2012 à 19:10:39 | Re : classe de connection PDO : tester si une base existe

TychoBrahe

Nope. Ce que tu devrais faire, par exemple, c'est catcher les exception au niveau de l'application elle même (et non au niveau local de ta connexion SQL) et, lorqu'il y en a une, avoir une gestion de cette forme :
1. Je log l'erreur quelque part (eg: fichier custom, déclenchement d'erreur php si jamais display_errors est à off et log_errors à on, etc)
2. Affichage d'un message d'erreur générique à l'utilisateur. (eg: "Une erreur s'est produite, veuillez nous excuser pour ce désagrément.").

Ainsi : Toi tu as le message d'erreur quelque part, et en plus de manière asynchrone. L'utilisateur à un message qui a du sens pour lui et ne divulgue rien sur ce que tu as fait.

Bref, set_exception_handler() peut t'aider, mais ce n'est pas la seule manière de faire.

Au passage, définir une gestion d'exceptions globale ne t'empêche pas d'en faire au niveau local dans certaines situations particulières hein ;) Par exemple, si une exception n'empêche pas le fonctionnement de l'application, alors il faut l'attraper au lieux de tout arrêter.
mardi 31 janvier 2012 à 19:15:19 | Re : classe de connection PDO : tester si une base existe

cod57


/* CONSTRUCTEUR : héritage public obligatoire par héritage de PDO */



autrement à lire

Tapez le texte de l'url ici.

mais l'utilisateur final ne doit avoir aucune connaissance du détail de l'erreur

complètement d'accord


Bonne programmation !
jeudi 2 février 2012 à 05:27:23 | Re : classe de connection PDO : tester si une base existe

555clR

ouais... je me suis bien cassée les dents à vouloir attraper mes erreurs avec set_exception_handler()... je n'arrive pas à en récupérer les n° de code pour en faire quelque chose et ma classe me pose de sacrés pb...
pis je m'emmêle les pinceaux...en même temps, les classes et pdo sont deux choses nouvelles pour moi.

je pensais faire une nouvelle propriété dans ma classe avec une méthode privée et une publique pour la consulter

Code PHP :
<?php private $exception_handler = array();

private function exception_handler($e) {
 return array("mess" => $e->getMessage(), "code" => $e->getCode(), "line" => $e->getLine());
}?>


Code PHP :
<?php get_exception_handler()
{
  return $this->_exception_handler
}?>


et puis j'avais mis dans mon catch de l'instance :
Code PHP :
<?php catch (PDOException $e)
{
  exception_handler($e)
}?>


... euh ... jsais pu où j'en suis là...
I need help !

1 2

Cette discussion est classée dans : base, tester, classe, existe, pdo


Répondre à ce message

Sujets en rapport avec ce message

verif existance dans bdd [ par cseagle ] Bonjour à tous,J'ai une table MySql membres qui contient les infos des membres. A l'inscription je vérifie si l'email existe déjà dans la base auquel Tester pour voir si un fonction existe sur le serveur ... [ par simbabarbier ] Bonjour, j'aimerais savoir s'il était possible de savoir si une fonction existe sur mon hébergement ... Pouvez-vous m'aider ??? Base de données, php et flux [ par benjimanweb ] J'aimerai savoir s'il est possible de créer un script permettant de voir ce que l'ordinateur verifie sur la base de données lorsque l'on clique sur le Tester si une variable existe [ par ICIoBRa ] Salut a tous :)J'aimerai savoir comment faire pour tester si une variable existe merci :)ICIoBRa Comment tester le serveur mysql avec la fenêtre DOS [ par jmlucienvb ] Bonjour,Jusqu'à présent je développais mes sites en ASP.Changement de cap :  j'ai installé easyPhp 1.8 avec le cortège mysql, php et apache.Je démarre créationd'une base en mysql [ par sofiesofie ] bonjour, je veu créer une base de donnée par le eaysyphp1.6 .je fait mon diagramme de classe en UML. e j'ai une classe  QUESTION(num_qst, laquestion, MSSQL [ par leo666 ] Bonjour à tous,Je suis en train de developper une application utilisant une base de données MS SQL Server 2005 express.J'ai essayer plusieurs type de Classe d'accès à une base de données [ par MadM@tt ] Bonjour à tous,Voilà j'ai réalisé une classe de connexion à une base de données.Seulement maintenant, pour l'utiliser, je suis face à un choix sur leq Tester si un fichier local existe [ par converse ] Bonjour à tous,Dans le cadre d'un site intranet j'aimerais protéger l'accès aux pages de l'intranet en testant si un fichier existe sur un des disques Récupération des TOUTES les tables d'une base de données avec PDO [ par roymatthieu ] Bonjour à tous, Je suis entrain de créer un classe de gestion de backup de site. Le principe est la sauvegarde des fichiers et des réperoires du ser


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,279 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales