[RESOLU] max_user_connections chez LWS

Petit nouveau ! | 4 Messages

13 oct. 2021, 20:45

Bonjour,
je viens de terminer une petit application pour ma formation de développeur. C'est du PHP/MySql/HTML/Bootsrap.
Mon site fonctionne très bien en local sous Xampp.
Mais quand je le mets en ligne, j'ai l'erreur suivante :
Erreur : SQLSTATE[HY000] [1226] User 'fatab195806' has exceeded the 'max_user_connections' resource (current value: 20)

C'est hébergé chez LWS.

La page d'accueil de mon site est censé être là :
fatabien dot com/digital_campus/06/


D'autres pages fonctionnent, car il y a sûrement moins de requêtes MySql pour les afficher :
fatabien dot com/digital_campus/06/mission.php?id=1

fatabien dot com/digital_campus/06/index.php?page=planques

J'ai essayé d'ajouter des $stmt->closeCursor(); après l'exécution des requêtes, mais ça ne change rien.
Pouvez-vous m'aider svp ?

Voici le lien vers le repository de ce projet, sur GitHub :
github dot com/fabienmacip/spy

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9039 Messages

13 oct. 2021, 23:25

Il n'y a malheureusement pas beaucoup de solutions : Tu es sur l'offre la plus petite de LWS, donc soit tu diminues le nombre de requêtes soit tu passes à une offre supérieure ou sur un autre hébergeur qui n'a pas cette limitation.
https://aide.lws.fr/base/Hebergement-we ... gement-web
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 1935 Messages

13 oct. 2021, 23:36

https://github.com/fabienmacip/spy/blob ... rateur.php
use Modele;

https://github.com/fabienmacip/spy/blob ... modele.php
public function __construct()
{
try {
$this->pdo = new PDO('mysql:host=localhost;dbname=spy;charset=utf8', 'root', '');
} catch (PDOException $e) {
exit('Erreur : '.$e->getMessage());
}
}
https://github.com/fabienmacip/spy/blob/main/index.php
require_once('modeles/Modele.php');
require_once('modeles/Mission.php');
require_once('modeles/Missions.php');
require_once('modeles/Pays.php');
require_once('modeles/Payss.php');
require_once('modeles/Specialite.php');
require_once('modeles/Specialites.php');
require_once('modeles/TypeMission.php');
require_once('modeles/TypeMissions.php');
require_once('modeles/TypePlanque.php');
require_once('modeles/TypePlanques.php');
require_once('modeles/Administrateur.php');
require_once('modeles/Administrateurs.php');
require_once('modeles/Planque.php');
require_once('modeles/Planques.php');
require_once('modeles/Personne.php');
require_once('modeles/Personnes.php');

je ne connais pas ce que fait use, mais de ce que je comprend les require de chaque modele créent un objet modele qui créé une connexion à la bdd.
il faut donc faire autrement, pour avoir une seule connexion d'ouverte pour index.php.

Petit nouveau ! | 4 Messages

14 oct. 2021, 18:36

Merci or1,

effectivement, je pense que le problème vient du fait que Modèle crée chaque fois une nouvelle connexion. Et en appelant Modele plusieurs fois lors de mes "require_once('modeles/uneClasse.php')", je crée trop de connexions.

Du coup, je ne sais pas comment faire en sorte de ne créer qu'une seule connexion, puis la passer ensuite en paramètre à chacune de mes classes.

Petit nouveau ! | 4 Messages

14 oct. 2021, 18:37

@rthur, merci pour l'info, je suis allé voir chez LWS, effectivement je suis limité. Je préfère tenter de diminuer le nombre de connexions de mon programme, ça me permettra d'économiser des ressources de mémoire et d'optimiser mon code.

Petit nouveau ! | 4 Messages

14 oct. 2021, 22:44

Problème résolu, merci.

J'ai fait un fichier ConnectMe.php

<?php

$pdo = null;

try {
$pdo = new PDO('mysql:host=localhost;dbname=spy;charset=utf8', 'root', '');
//$pdo = new PDO('mysql:host=91.216.107.161;dbname=fatab195806_9ectvj;charset=utf8', 'fatab195806', '!Angular20');
} catch (PDOException $e) {
exit('Erreur : '.$e->getMessage());
}

/* ******************************* */
Que j'importe dans mes pages principales (index, mission, connection).

Puis, je passe l'unique objet PDO à mon Modele.php


trait Modele
{
private $pdo = null;

public function __construct(PDO $pdo)
{
try {
//$this->pdo = new PDO('mysql:host=localhost;dbname=spy;charset=utf8', 'root', '');
$this->pdo = $pdo;
//$this->pdo = new PDO('mysql:host=91.216.107.161;dbname=fatab195806_9ectvj;charset=utf8', 'fatab195806', '!Angular20');
} catch (PDOException $e) {
exit('Erreur : '.$e->getMessage());
}
}
}

/* ******************************* */
Enfin, j'importe le $this->pdo dans tous mes fetchObject, exemple :

class Specialites
{
use Modele;

// READ
public function lister()
{
if (!is_null($this->pdo)) {
$stmt = $this->pdo->query('SELECT * FROM specialite ORDER BY intitule');
}
$liste = [];
while ($element = $stmt->fetchObject('Specialite',[$this->pdo])) {
$liste[] = $element;
}
$stmt->closeCursor();
return $liste;
}