Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/09/2011, 09h58   #1
Membre à l'essai
 
Homme F. Mithieux
Étudiant
Inscription : juin 2008
Messages : 99
Détails du profil
Informations personnelles :
Nom : Homme F. Mithieux
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2008
Messages : 99
Points : 20
Points : 20
Par défaut Problème de sécurité suite à un plantage OVH

Bonjour à tous,
Je vous contact aujourd'hui, car j'ai un gros problème de sécurité ...
Aujourd'hui même, le serveur OVH hébergent la plupart des sites web de mon entreprise a planté, ou du moins quelque chose produit une erreur, nous empêchant toute connexion à toutes les bases de données.
Un gros problème:
Le message d'erreur affiché, précise mon identifiant et mon MDP pour la connexion à la bdd ovh.
Le voici:
Citation:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[00000] [1040] Too many connections' in /homez.xxx/xxx/xxx/xxx/classes/PdoConnect.php:16 Stack trace: #0 /homez.xxx/xxx/xxx/xxx/classes/PdoConnect.php(16): PDO->__construct('mysql:host=10.0.xxx', 'LOGIN', 'MDP') #1 /homez.xxx/xxx/xxx/xxx/templates/menu.php(27): PdoConnect->__construct() #2 /homez.xxx/xxx/xxx/xxx/index.php(153): require_once('/homez.xxx/agen...') #3 {main} thrown in /homez.xxx/xxx/xxx/xxx/classes/PdoConnect.php on line 16
Et voici en dessous mon fichier pdoConnect.php:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
 
abstract class PdoConnect {
 
	const DRIVER = 'mysql';
	const HOST = 'xxx';
	const PORT = '';
	const DATABASE_NAME = 'xxx';
	const USER = 'xxx';
	const PASSWORD = 'xxx';
	protected $pdo;
 
	public function __construct() {
 
		$dsn = self::DRIVER.':host='.self::HOST.';dbname='.self::DATABASE_NAME;
		$this->pdo = new PDO($dsn, self::USER, self::PASSWORD);
	}
 
}
 
?>

Existe-t'il un moyen de changer le message d'erreur ? D'éviter cette erreur, ou autre ?
Je vous remercie d'avance pour votre aide .
Arget est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 11h09   #2
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
L'erreur que tu as est plutôt claire :
Citation:
Too many connections
Je présume que dans ton code, tu dois avoir plusieurs fois des $db = new PdoConnect; ? Si c'est le cas, comme ceci instancie une nouvelle instance de PDO à chaque fois, ça va aussi lancer une connexion à la base...

Si c'est le cas, plusieurs solutions :
- Implémenter le design pattern singleton
- Être sûr d'instancier qu'une seule fois PdoConnect au début de ton code et d'utiliser cette instance partout.

Même si la 1ère est magique, je préfère, de loin, la 2e.
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 11h47   #3
Membre à l'essai
 
Homme F. Mithieux
Étudiant
Inscription : juin 2008
Messages : 99
Détails du profil
Informations personnelles :
Nom : Homme F. Mithieux
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2008
Messages : 99
Points : 20
Points : 20
Merci pour ta réponse .
Mais je pense que PDO n'est appelé qu'une seule fois, si je ne me trompe pas.(D'ailleurs, l'exemple que je vous ai montré est le seul qui marche avec PDO, alors que tous les autres sites plantent).

Ci-dessous un exemple de classe où je fais appel à PDOConnect.php:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
 
    require_once 'PdoConnect.php';
 
    class MaClass extends PdoConnect {
 
 
        public function getTable() {
 
            $query = $this->pdo->prepare("SELECT *
                                         FROM xxx
                                         ORDER BY timestamp DESC");
 
            $query->execute(); /* Suite du code */

OVH s'est occupé de la remise en route, et tout remarche très bien, mais voilà, dans le cas d'un éventuel autre problème de ce genre, je préfère éviter que les identifiants de connexion à la BDD soient visible par tous :/.
Arget est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 15h27   #4
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 661
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 661
Points : 5 388
Points : 5 388
L'erreur étant Uncaught exception 'PDOException', tu dois pouvoir intercepter l'exception et relancer une autre exception avec un message un peu plus neutre.
Par exemple :
Code :
1
2
3
4
5
6
7
8
public function __construct() {
	$dsn = self::DRIVER.':host='.self::HOST.';dbname='.self::DATABASE_NAME;
	try {
		$this->pdo = new PDO($dsn, self::USER, self::PASSWORD);
	} catch (PDOException $e) {
		throw new Exception('Connexion a la base de donnee impossible');
	}
}
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 17h09   #5
Membre à l'essai
 
Homme F. Mithieux
Étudiant
Inscription : juin 2008
Messages : 99
Détails du profil
Informations personnelles :
Nom : Homme F. Mithieux
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2008
Messages : 99
Points : 20
Points : 20
AH ! Je me disais bien que le try catch me serait utile un jour ^^.

Alors, étant donné que OVH a fait remarcher les services, j'ai simplement fourni de faux identifiants pour faire un test, et cela marche parfaitement ! =)

Merci beaucoup !
Arget est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h42.


 
 
 
 
Partenaires

Hébergement Web