IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Erreur : MySQL server has gone away


Sujet :

PHP & Base de données

  1. #1
    Invité
    Invité(e)
    Par défaut Erreur : MySQL server has gone away
    Bonjour,

    J'ai une application qui utilise une base de données MySQL. J'ai une erreur qui s'affiche à chaque fois que je mets des données dans les tables.

    MySQL server has gone away
    J'ai été voir sur cette page pour essayer de résoudre mon problème mais sans succès... J'ai également redémarrer MySQL mais toujours l'erreur.

    D'où peut provenir cette erreur? Comment la corriger ?

  2. #2
    FoxLeRenard
    Invité(e)
    Par défaut
    Bonjour,
    Il te suffit de controler quand tu ouvre tes bases de données, puis quand tu les fermes,

    En general concernant cette erreur il y a deux précautions a prendre

    Se connecter ET ouvrir Mysql juste avant chaque série de requéte !
    Attention aux if(....) qui ferait un reroutage sans fermer ta base.
    placer donc mysql_close partout ou nescessaire !

    Deuxiéme point ta taille de requéte ... si tes tables sont trop grosses
    et les requétes mal optimisées, la même erreur peut étre indiquée comme un overflow !


    Donc a toi de voir ton code, (nous ne l'avons pas , donc )

    Bonne recherche

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci pour ta réponse! Pour l'instant, MySQL est down sur le serveur... impossible de redémarrer le service...

    Je testerai quand j'aurai réussi à lancer le tout.

  4. #4
    FoxLeRenard
    Invité(e)
    Par défaut
    Citation Envoyé par babastutz Voir le message
    Merci pour ta réponse! Pour l'instant, MySQL est down sur le serveur... impossible de redémarrer le service...
    Je testerai quand j'aurai réussi à lancer le tout.
    Oui alors tout laisse a penser que ce n'est pas ton code

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    J'ai contrôlé mon site et j'ai ajouté des mysql_close partout où c'était nécessaire mais l'erreur persiste.

    Ma requête est très longue et je pense que c'est à cause de ça que j'ai l'erreur. Comment remédier à ce problème ?

  6. #6
    FoxLeRenard
    Invité(e)
    Par défaut
    Citation Envoyé par babastutz Voir le message
    Bonjour,

    J'ai contrôlé mon site et j'ai ajouté des mysql_close partout où c'était nécessaire mais l'erreur persiste.

    Ma requête est très longue et je pense que c'est à cause de ça que j'ai l'erreur. Comment remédier à ce problème ?
    On a toujours mille façon d'optimiser son code

    1) par la qualitée de la requéte
    2) devant unbesoins nouveau , repenser a la définition des tables Mysql
    A toi de creuser la question

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par FoxLeRenard Voir le message
    On a toujours mille façon d'optimiser son code

    1) par la qualitée de la requéte
    2) devant unbesoins nouveau , repenser a la définition des tables Mysql
    A toi de creuser la question
    La requête n'a pas besoin d'être repensée, c'est une simple requête d'insertion mais il y a des milliers d'enregistrements d'un coup...

  8. #8
    FoxLeRenard
    Invité(e)
    Par défaut
    Citation Envoyé par babastutz Voir le message
    La requête n'a pas besoin d'être repensée, c'est une simple requête d'insertion mais il y a des milliers d'enregistrements d'un coup...

    Tu as un visiteur qui t'apporte a l'ecran un millier de datas en saissie sur ton web

    Ou bien c'est autre chose de plus enfantin, genre maintenance par toi

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par FoxLeRenard Voir le message
    Tu as un visiteur qui t'apporte a l'ecran un millier de datas en saissie sur ton web

    Ou bien c'est autre chose de plus enfantin, genre maintenance par toi
    C'est de l'import depuis un fichier XML

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par babastutz Voir le message
    J'ai été voir sur cette page pour essayer de résoudre mon problème mais sans succès... J'ai également redémarrer MySQL mais toujours l'erreur.
    Salut,

    as-tu regardé du côté des logs du serveur mysql?

  11. #11
    FoxLeRenard
    Invité(e)
    Par défaut
    Citation Envoyé par babastutz Voir le message
    C'est de l'import depuis un fichier XML

    Oui j'aurais parié !!
    Alors c'est enfantin, tu lis ton fichier physiquement et tu mets chaque data dans des Array
    (je veux dire que si ta table a 5 elements crées 5 array
    par contre unseul compteur)

    tu as donc le nombre de datas, et la par exemple par 100
    tu
    1) ouvre (connectes) Mysql
    2) injecte 1 a 100
    3 ferme Mysql
    4 Retour en 1) avec compteur 101 200 .....

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par FoxLeRenard Voir le message
    Oui j'aurais parié !!
    Alors c'est enfantin, tu lis ton fichier physiquement et tu mets chaque data dans des Array
    (je veux dire que si ta table a 5 elements crées 5 array
    par contre unseul compteur)

    tu as donc le nombre de datas, et la par exemple par 100
    tu
    1) ouvre (connectes) Mysql
    2) injecte 1 a 100
    3 ferme Mysql
    4 Retour en 1) avec compteur 101 200 .....
    J'essais de mettre en pratique cette idée mais j'ai quelques soucis... J'ai réussi à mettre chaque enregistrement dans un tableau. Je bloque sur les boucles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    for($j = 1; ($j*100) <= $i; $j++)
    {
    	// connexion à la base de donnée
    	// fermer la connexion avec mysql_close($lienDB);
    	include("inc.bdd.php") ;
     
    	$req = $sql;
     
    	for($h = $j; $h <= ($j*100); $h++)
    	{
    		$req .= $sql_tab[$h];
    		if($h < ($j*100) && $h < $i)
    			$req .= ",";
    	}
    	if(!$res=mysql_query($req))
    	{
    		echo "<br/><br/>Une erreur est survenue...";
    		//echo $req;
    		echo mysql_error();
    		mysql_close($lienDB);
    		exit;
    	}
     
    	mysql_close($lienDB);
    }
    Surtout les conditions en fait. J'ai toujours la même erreur pour l'instant

  13. #13
    FoxLeRenard
    Invité(e)
    Par défaut
    Dans ton code je ne vois pas la lecture du fichier,
    Tu dois bien commencer par lire ton XML
    Puis ligne par ligne tu les mets dans une variable array

    et tout ça sans ouvrir MYSQL

    donc tu connais ton nombre de lignes écrites dans ton array

    ensuite ouvre mysql
    et enregistre par exemple laligne [2] que je vois ton code.

    Si ça marchec' est facile de faire le tout sans erreurs.

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par FoxLeRenard Voir le message
    Dans ton code je ne vois pas la lecture du fichier,
    Tu dois bien commencer par lire ton XML
    Puis ligne par ligne tu les mets dans une variable array

    et tout ça sans ouvrir MYSQL

    donc tu connais ton nombre de lignes écrites dans ton array

    ensuite ouvre mysql
    et enregistre par exemple laligne [2] que je vois ton code.

    Si ça marchec' est facile de faire le tout sans erreurs.
    Voilà où j'en suis pour l'instant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    if($xmlFlux = simplexml_load_file($XMLfile))
    {			
     
    	$result = $xmlFlux->xpath('//dir');
     
    	$sql = "INSERT INTO `sinistre` 
    				(
    				1, 
    				2, 
    				3
    				) VALUES " ;
     
    	$i = 0 ;
    	$sql_tab = array();
     
    	foreach($result as $key => $ele)
    	{
    		$i++ ;
     
    		$1 = addslashes((string) utf8_decode($ele['1'])) ;
    		$2 = addslashes((string) utf8_decode($ele['2'])) ;
    		$3 = (int) ($ele->3) ;
     
    		// Problème de la virgule de fin de requete
     
    		$sql_tab[$i] = "('".$1."', 
    				'".$2."',
    				".$3.")" ;
     
    		}
    	}
     
    	for($j = 1; ($j*100) <= $i; $j++)
    	{
    		// connexion à la base de donnée
    		// fermer la connexion avec mysql_close($lienDB);
    		include("inc.bdd.php") ;
     
    		$req = $sql;
     
    		for($h = $j; $h <= ($j*100); $h++)
    		{
    			$req .= $sql_tab[$h];
    			if($h < ($j*100) && $h < $i)
    				$req .= ",";
    		}
    		if(!$res=mysql_query($req))
    		{
    			echo "<br/><br/>Une erreur est survenue...";
    			echo mysql_error();
    			mysql_close($lienDB);
    			exit;
    		}
     
    		mysql_close($lienDB);
    }
    Le fichier XML est bien lu et mon tableau $sql_tab est bien rempli. C'est dans l'exécution des requêtes que ça foire.

    Merci de ton aide !

  15. #15
    FoxLeRenard
    Invité(e)
    Par défaut
    Bonjour,
    Mais peux tu m'expliquer $j*100
    c 'est complétement out du champ de l'array

  16. #16
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par FoxLeRenard Voir le message
    Bonjour,
    Mais peux tu m'expliquer $j*100
    c 'est complétement out du champ de l'array
    En effet, c'est un peu n'importe quoi.... Je vais revoir mes boucles.

  17. #17
    Invité
    Invité(e)
    Par défaut
    Mon code m'a pourtant l'air correct. J'envoie 100 enregistrements par requête mais j'ai un autre message d'erreur maintenant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    for($j = 1; $j <= $i; $j++)
    {
    	// connexion à la base de donnée
    	// fermer la connexion avec mysql_close($lienDB);
    	include("inc.bdd.php") ;
     
    	$req = $sql;
     
    	for($h = $j; $h <= ($j*100) && $h <= $i; $h++)
    	{
    		$req .= $sql_tab[$h];
    		if($h < ($j*100) && $h < $i)
    			$req .= ",";
    	}
    	//$res = mysql_query($sql);
    	if(!$res=mysql_query($req))
    	{
    		echo "<br/><br/>Une erreur est survenue...";
    		echo $req;
    		echo mysql_error();
    		mysql_close($lienDB);
    		exit;
    	}
     
    	mysql_close($lienDB);
    }
    Erreur :

    Got a packet bigger than 'max_allowed_packet' bytes

  18. #18
    FoxLeRenard
    Invité(e)
    Par défaut
    Ce code continu a me paraitre douteux
    le deuxiéme for commence toujours par =1 ??
    et quelle syntaxe !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    for($j = 1; $j <= $i; $j++)
    {
    	// connexion à la base de donnée
    	// fermer la connexion avec mysql_close($lienDB);
    	include("inc.bdd.php") ;
     
    	$req = $sql;
     
    	for($h = $j; $h <= ($j*100) && $h <= $i; $h++)
    	{

  19. #19
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par FoxLeRenard Voir le message
    Ce code continu a me paraitre douteux
    le deuxiéme for commence toujours par =1 ??
    et quelle syntaxe !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    for($j = 1; $j <= $i; $j++)
    {
    	// connexion à la base de donnée
    	// fermer la connexion avec mysql_close($lienDB);
    	include("inc.bdd.php") ;
     
    	$req = $sql;
     
    	for($h = $j; $h <= ($j*100) && $h <= $i; $h++)
    	{
    Non. $j va prendre toutes les valeurs de 1 à $i. Il y a un $j++ dans la boucle for

  20. #20
    FoxLeRenard
    Invité(e)
    Par défaut
    De toute façon max_allowed_packet = 1M tu dois étre bien au dela !

Discussions similaires

  1. [MySQL] Erreur 2006 Mysql server has gone away
    Par madone dans le forum PHP & Base de données
    Réponses: 24
    Dernier message: 11/12/2014, 11h30
  2. [MySQL] MySQL Server has gone away : timeout de 60 secondes ?
    Par kaboume dans le forum PHP & Base de données
    Réponses: 20
    Dernier message: 12/10/2011, 16h48
  3. erreur #2006 - MySQL server has gone away
    Par darknico dans le forum Administration
    Réponses: 1
    Dernier message: 13/11/2009, 11h43
  4. Réponses: 3
    Dernier message: 13/03/2009, 13h23
  5. MySQL server has gone away
    Par maple dans le forum Installation
    Réponses: 3
    Dernier message: 04/05/2006, 11h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo