Bonjour,
La taille de mes donnees est gigantesque, et quelquefois, suivant la requete, odbc tourne en boucle et bloque completement la navigation sur le site, jusqu'a ce que je redemarre mon serveur MSSQL.
Donc, je voudrais creer un Timeout a odbc_exec(), qui stoppe le processus sur le SGBD apres un temps donne.
Je n'ai pas trouve beaucoup de solutions, mais pour l'instant, mon code ressemble a ca:
avec sleep_and_rollback.php:
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 run_in_bg($cmd, $winStyle = 0, $waitOnReturn = false) { $WshShell = new COM("WScript.Shell"); $oExec = $WshShell->Run($cmd, $winStyle, $waitOnReturn); $WshShell->Release(); return $oExec; } function query_database($query, $criteria = null){ $connection = DB_api::get_connection(); $pid = odbc_prepare ($connection, $query); $pid2 = run_in_bg('c:\wamp\bin\php\php.5.2.11\php.exe sleep_and_rollback.php?pid='.$pid); $result = odbc_execute($res, null) or $this->logger->err('DB_API: ODBC failed executing query'); //if odbc_execute is correct, then we stop $pid2 before it rollbacks the execution. run_in_bg("TASKKILL /PID ".$pid2); //(...suite de la fonction qui traite le resultat..) }
Le but est donc d'avoir deux threads, un pour executer la requete et un autre pour compter 10 secondes. a la fin de l'execution de la requete on coupe le comptage du temps ; a la fin du temps on coupe l'execution de requete en utilisant rollback.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <?php $pid = $_GET['pid']; sleep(10); odbc_rollback(); ?>
Mais bien sur cela ne fonctionne pas. Evidemment si une autre solution me permettait de limiter le temps de requete directement au niveau de SQL Server, ce serait valide.
Merci d'avance de votre aide !
Partager