Jump to content

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


Recommended Posts

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 🙂

 

 

Link to comment
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 ^^ )
 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...