Page 1 sur 1

max_user_connections chez LWS

Posté : 13 oct. 2021, 20:45
par fatabien
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

Re: max_user_connections chez LWS

Posté : 13 oct. 2021, 23:25
par @rthur
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

Re: max_user_connections chez LWS

Posté : 13 oct. 2021, 23:36
par or 1
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.

Re: max_user_connections chez LWS

Posté : 14 oct. 2021, 18:36
par fatabien
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.

Re: max_user_connections chez LWS

Posté : 14 oct. 2021, 18:37
par fatabien
@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.

Re: max_user_connections chez LWS

Posté : 14 oct. 2021, 22:44
par fatabien
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;
}