Jump to content
crocodudule

[AUTO-RESOLU] Erreur d'insertion mysql Row size too large (> 8126)

Publications recommandées

Bonjour à tous.

Je souhaite vous soumettre une difficulté que je n'arrive pas à résoudre car je ne comprends pas où se trouve problème.

En premier lieu, je précise que mon script passe sans problème sous mon serveur LAMP (config de base), mon serveur web nginx perso (à la maison), mais pas sur mon hébergement GANDI qui est un Simple Hosting.

Pour bien comprendre j'ai 19 colonnes TEXT qui stockent des données venant de TEXTAREA.

Avant d'être enregistrer, ces données passent par une fonction qui les chiffre à l'aide d'openssl_encrypt via une clef (générée à partir d'un hash md5) avec l'algo AES-128-ECB, ceci donnant un tout bête;

return ( openssl_encrypt ($data,"AES-128-ECB",$clef) ) ;

Le résultat de chaque donnée chiffrée est protégée avec mysqli_real_escape_string avant insertion (même si je pense que c'est pas forcément nécessaire puisqu'il s'agit de données chiffrée en AES qui, sauf erreur, n'utilise pas de caractères pouvant faire planter l'insertion).

Voila le code au moment de l'insertion:

$connection = mysqli_connect($hostsql, $usersql, $passsql, $database);
if (mysqli_connect_errno()) {
	echo "Echec de la connexion: " . mysqli_connect_error();
	exit();
}
function UpdateData ($link,$table,$col,$data,$idtraitement,$iduser)
	{
		mysqli_set_charset($link,"utf8");
		$sql = "UPDATE ".$table." SET ".$col."='".$data."' WHERE IDTRAITEMENT='".$idtraitement."' AND IDUSER='".$iduser."'";
		$req = mysqli_query($link, $sql );
		$error = mysqli_error($link);
		if ( strlen($error) > 1 ) { echo "- ".$col." ".$data."<br>".$error."<br>"; }
		return ( $error ) ;
	}
UpdateData ($connection,"TRAITEMENTS","QUALITE",$qualite,$idtraitement,$iduser); [...]
mysqli_close($connection);

A l'aide de la fonction Updatedata j'envoie successivement mes tinyint et varchar (26 en tout), puis mes TEXT (au total 44 colonnes sont mises à jour par le script).

Et sur mon serveur gandi, j'ai ce message d'erreur à l'update de certaine colonnes TEXT :

Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.


Je sèche parce que sur d'autres colonnes (TEXT) ça passent sans problème et même avec des textes plus longs que la chaine qui m'a permis de trouver l'erreur pour la première fois.

D'ailleurs pour information, voila la tête de la chaine qui fait planter l'update:

9TuF753xpAMfR+PPWR6b9aI9vFxtPtmAbzLtlUgvcQzIf55GFUdFU6GAlYsx0GNRQspt0zAmRj1mWOnUhdl89PUe5Sq18tZQ5lW4PRHtCQDLDVXs9y7a4WxzZAMVWJVTeP3mhwuYQ+PL3KItrhIdGDfJ2nZp4poIvZfA3fTJ/7UVd0cuyXOHkDj5+mfxvlr3xaakpNuKcSS5IcYKLP+o6GqCKM2enYYygT28KPk1JfHGYt9LKA3UTQpl06WDe/G8nH9q4IyCvw45+FXKgC3LHybvVaQApJnIjLsk5gNcpfgOtwgIZqO80wWs50qo4Va5atmnw09AqW62SgNukXJ2K4DrdtAhZ608mrzGU14gKyGnBJMxxWogfbRoRUJzhbfvSoXkinEuZ2uVuMwvf7/MMEBObAua4sc0A7GyPoIcztfJ8YmneTephxWp4z60HIVM3ma76mXmWPnQ7YJLq84ONK9a7Y1W3Hq6eiLoIujnDongYyppN6j0MfcPqNsLfzanJZ+K6DxF5LvGak3CzCgEjclMhpahHpTqDFozjZ8ywuyvZXvXzSWSwTkPwgc/L0oNUR/8UrIob/hnXvNfPccUd3EJ

Toute aide ou même piste est la bienvenue. Merci 🙂

 

 

Modifié par crocodudule

Partager cette publication


Link to post
Share on other sites

Parfois, lorsqu'on a tout checker 20 fois c'est que le script y est pour rien ...

En réalité, j'ai du faire à un moment donné une fausse manip sur la table qui a du être altérée (bien que je n'ai aucune alerte sur phpmyadmin).

J'ai supprimé la table et après nouvelle création, tout roule parfaitement !

(Bon au moins, j'ai jamais autant optimisé un script ^^ )
 

Partager cette publication


Link to post
Share on other sites

Veuillez vous connecter pour commenter

Vous serez en mesure de laisser un commentaire après vous être connecté



Se connecter dès maintenant

×