Uncaught exception 'PDOException'

Avatar du membre
Mammouth du PHP | 1564 Messages

23 janv. 2012, 23:43

Bonsoir,

mon fichier error_log est saturé de message du genre:

Code : Tout sélectionner

[02-Jan-2012 18:55:51] PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction' in /home/publifr/public_html/display.php:1854 Stack trace: #0 /home/publifr/public_html/display.php(1854): PDOStatement->execute(Array) #1 {main} thrown in /home/publifr/public_html/display.php on line 1854

Code : Tout sélectionner

[02-Jan-2012 18:55:51] PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction' in /home/publifr/public_html/display.php:1854 Stack trace: #0 /home/publifr/public_html/display.php(1854): PDOStatement->execute(Array) #1 {main} thrown in /home/publifr/public_html/display.php on line 1854
Plus de 400.000 lignes quand même... ^^


voici mon code à la ligne 1854:
	$UpdtStats = $bdd->prepare("UPDATE ".PREFIX_TBL."stats_".$arrayType[$type]."_commune SET 
	afficher = (afficher + :afficher) WHERE 
	id_membre = :id_membre AND 
	ip = :ip AND 
	site_diffuseur = :site_diffuseur AND 
	format = :format AND 
	campagne_id = :campagne_id AND 
	type_annonceur = :type_annonceur LIMIT 1");
	$UpdtStats->execute(array(
	':afficher' => 1,
	':id_membre' => $id_membre,
	':ip' => $ip,
	':site_diffuseur' => $SiteConverti,
	':format' => $format,
	':campagne_id' => $id_campagne,
	':type_annonceur' => 'defaut'));
Merci d'avance pour vos éventuelles réponse

ViPHP
xTG
ViPHP | 7331 Messages

24 janv. 2012, 09:59

Tu utilises les transactions mais tu sembles avoir oublié un commit.
Ou bien tu as lock une table mais tu ne l'as pas débloqué.

Ou encore tu débloques bien mais tu as des scripts plus long que le timeout de PDO.
Or un script lancé en parallèle (par un autre utilisateur ?) est en train de travailler sur les mêmes tables.

Avatar du membre
Mammouth du PHP | 1564 Messages

24 janv. 2012, 10:14

oui, c'est fort possible ta dernière solution car c'est une régie publicitaire et ce code est dans la page qui fourni les bannières, donc très utilisé par plusieurs comptes.

J'irais voir si j'ai oublier un commit() tout de même, merci :wink: