salut,
j'essaye de basculer de l'utilisation de fonctions mysql vers mysqli mais je rencontre un probleme avec les rollbacks notament.
auparavant j'executais mes requetes sql grace a la fonction ci dessous (en mysql ) :
et la combinaison suivante fonctionnait :
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 function runSQL($sql_string){ $link = mysql_pconnect($config['db_server'], $config['db_user'], $config['db_password']); if($link == false) { exit("Can not connect to database : \"".$config['db_database']."\". Mysql error : ".mysql_error()); } $db_selected = mysql_select_db($config['db_database'], $link); if($db_selected == false) { exit("Can not select database : \"".$config['db_database']."\". Mysql error : ".mysql_error()); } $res = mysql_query($sql_string,$link); $result = array(); for ($i=0; $i<mysql_num_rows($res); $i++) { $result[] = mysql_fetch_assoc($res); } mysql_free_result($res); mysql_close($link); return $result; }
maintenant avec ma nouvelle fonction runSQL qui utilise mysqli, je vois bien passer le rollback dans la liste des requetes exécutées mais le delete n'est plus annulé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 runSQL("START TRANSACTION;"); runSQL("DELETE FROM test;"); runSQL("ROLLBACK;");
je me dis que c'est peut etre du au fait que les 3 requetes exécutés ne travaillent pas sur la meme connection et que donc, le rollback ne fait pas un rollback du delete mais un rollback sur rien du tout... vous me suivez? en tout cas si vous avez des idées, n'hesitez pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 function runSQL($sql_string){ $mysqli = new mysqli($config['db_server'], $config['db_user'], $config['db_password'], $config['db_database']); $resultQuery = $mysqli->query($sql_string); $result = array(); for ($i=0; $i<$resultQuery->num_rows; $i++) { $result[] = $resultQuery->fetch_assoc(); } $mysqli->close(); return $result; }
une autre chose peut etre intéressante. si dans ma fonction en mysql, j'utilise un mysql_connect au lieu d'un mysql_pconnect, alors mes rollbacks ne fonctionnnent plus non plus. Peut etre que ma fonction en mysqli fait l'equivalent d'un mysql_connect et non un mysql_pconnect. mais je ne sais pas comment faire un mysql_pconnect en mysqli...
merci d'avance
Partager