PageRenderTime 27ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 0ms

/classes/utils/DbUtils.php

http://zeybux.googlecode.com/
PHP | 326 lines | 212 code | 47 blank | 67 comment | 30 complexity | 3ce43f8bfd8c2e3ea1cfb0626e46b2f6 MD5 | raw file
  1. <?php
  2. //****************************************************************
  3. //
  4. // Createur : Julien PIERRE
  5. // Date de creation : 25/01/2010
  6. // Fichier : DbUtils.php
  7. //
  8. // Description : Classe statique permettant d'executer des requetes dans la base de donnיes
  9. //
  10. //****************************************************************
  11. include_once(CHEMIN_CONFIGURATION . "DB.php"); // Intיgration des informations de configuration pour la connexion א la base de donnיes
  12. include_once(CHEMIN_CLASSES_UTILS . "MessagesErreurs.php"); // Intיgration des constantes d'erreurs
  13. include_once(CHEMIN_CLASSES_VR . "TemplateVR.php" );
  14. include_once(CHEMIN_CLASSES_VR . "VRerreur.php" );
  15. /**
  16. * @name DbUtils
  17. * @author Julien PIERRE
  18. * @since 25/01/2010
  19. *
  20. * @desc Classe fournissant des mיthodes de connexion א la base
  21. */
  22. class DbUtils
  23. {
  24. /**
  25. * @name creerConnexion
  26. * @return nothing
  27. * @desc Crיי une connexion א la BDD
  28. */
  29. public static function creerConnexion() {
  30. $mMysqlHost = MYSQL_HOST; // le serveur
  31. $mMysqlLogin = MYSQL_LOGIN; // le login
  32. $mMysqlPass = MYSQL_PASS; // mot de passe
  33. $mMysqlDbnom = MYSQL_DBNOM; // nom de la base de donnee
  34. // Initialisation du Logger
  35. $lLogger = &Log::singleton('file', CHEMIN_FICHIER_LOGS);
  36. $lLogger->setMask(Log::MAX(LOG_LEVEL));
  37. $lDb = @mysql_connect($mMysqlHost,$mMysqlLogin,$mMysqlPass);
  38. if(!$lDb) {
  39. $lLogger->log(MessagesErreurs::ERR_600_MSG . " : " . mysql_error(),PEAR_LOG_DEBUG); // Maj des logs
  40. $lVr = new TemplateVR();
  41. $lVr->setValid(false);
  42. $lVr->getLog()->setValid(false);
  43. $lErreur = new VRerreur();
  44. $lErreur->setCode(MessagesErreurs::ERR_600_CODE);
  45. $lErreur->setMessage(MessagesErreurs::ERR_600_MSG);
  46. $lVr->getLog()->addErreur($lErreur);
  47. die($lVr->exportToJson());
  48. } else {
  49. if (!@mysql_select_db($mMysqlDbnom,$lDb)) {
  50. $lLogger->log(MessagesErreurs::ERR_601_MSG . " : " . mysql_error(),PEAR_LOG_DEBUG); // Maj des logs
  51. $lVr = new TemplateVR();
  52. $lVr->setValid(false);
  53. $lVr->getLog()->setValid(false);
  54. $lErreur = new VRerreur();
  55. $lErreur->setCode(MessagesErreurs::ERR_601_CODE);
  56. $lErreur->setMessage(MessagesErreurs::ERR_601_MSG);
  57. $lVr->getLog()->addErreur($lErreur);
  58. die($lVr->exportToJson());
  59. } else {
  60. //$lRs = @mysql_query("SET NAMES UTF8"); // Permet d'initier une connexion en UTF-8 avec la BDD
  61. $lRs = @mysql_set_charset("utf8",$lDb); // Permet d'initier une connexion en UTF-8 avec la BDD
  62. if (!$lRs) {
  63. $lLogger->log(MessagesErreurs::ERR_603_MSG . " : " . mysql_error(),PEAR_LOG_DEBUG); // Maj des logs
  64. $lVr = new TemplateVR();
  65. $lVr->setValid(false);
  66. $lVr->getLog()->setValid(false);
  67. $lErreur = new VRerreur();
  68. $lErreur->setCode(MessagesErreurs::ERR_603_CODE);
  69. $lErreur->setMessage(MessagesErreurs::ERR_603_MSG);
  70. $lVr->getLog()->addErreur($lErreur);
  71. die($lVr->exportToJson());
  72. } else {
  73. return $lDb;
  74. }
  75. }
  76. }
  77. }
  78. /**
  79. * @name fermerConnexion
  80. * @return nothing
  81. * @desc Ferme la connexion א la BDD
  82. */
  83. public static function fermerConnexion($pDb) {
  84. if(!@mysql_close($pDb)) {
  85. // Initialisation du Logger
  86. $lLogger = &Log::singleton('file', CHEMIN_FICHIER_LOGS);
  87. $lLogger->setMask(Log::MAX(LOG_LEVEL));
  88. $lLogger->log(MessagesErreurs::ERR_602_MSG . " : " . mysql_error(),PEAR_LOG_DEBUG); // Maj des logs
  89. $lVr = new TemplateVR();
  90. $lVr->setValid(false);
  91. $lVr->getLog()->setValid(false);
  92. $lErreur = new VRerreur();
  93. $lErreur->setCode(MessagesErreurs::ERR_602_CODE);
  94. $lErreur->setMessage(MessagesErreurs::ERR_602_MSG);
  95. $lVr->getLog()->addErreur($lErreur);
  96. die($lVr->exportToJson());
  97. }
  98. //or die(MessagesErreurs::ERR_BDD_FERMETURE . " : <br>".mysql_error());
  99. }
  100. /**
  101. * @name executerRequete ($requete)
  102. * @param string
  103. * @return mysql_result
  104. * @desc Exיcute la requךte passיe en paramטtre
  105. */
  106. public static function executerRequete($pRequete) {
  107. $lDb = DbUtils::creerConnexion();
  108. $lResultat = @mysql_query($pRequete);
  109. //or die(MessagesErreurs::ERR_BDD_EXECUTION . " : <br>$pRequete<br>".mysql_error());
  110. if (!$lResultat) {
  111. // Initialisation du Logger
  112. $lLogger = &Log::singleton('file', CHEMIN_FICHIER_LOGS);
  113. $lLogger->setMask(Log::MAX(LOG_LEVEL));
  114. $lLogger->log(MessagesErreurs::ERR_603_MSG . " : " . mysql_error(),PEAR_LOG_DEBUG); // Maj des logs
  115. $lVr = new TemplateVR();
  116. $lVr->setValid(false);
  117. $lVr->getLog()->setValid(false);
  118. $lErreur = new VRerreur();
  119. $lErreur->setCode(MessagesErreurs::ERR_603_CODE);
  120. $lErreur->setMessage(MessagesErreurs::ERR_603_MSG);
  121. $lVr->getLog()->addErreur($lErreur);
  122. die($lVr->exportToJson());
  123. } else {
  124. DbUtils::fermerConnexion($lDb);
  125. return $lResultat;
  126. }
  127. }
  128. /**
  129. * @name executerRequeteInsertRetourId ($requete)
  130. * @param string
  131. * @return integer
  132. * @desc Exיcute la requךte d'insertion passיe en paramטtre et retourne l'identifiant gיnיrי par la BDD
  133. */
  134. public static function executerRequeteInsertRetourId($pRequete) {
  135. $lDb = DbUtils::creerConnexion();
  136. $lResultat = @mysql_query($pRequete);
  137. if (!$lResultat) {
  138. // Initialisation du Logger
  139. $lLogger = &Log::singleton('file', CHEMIN_FICHIER_LOGS);
  140. $lLogger->setMask(Log::MAX(LOG_LEVEL));
  141. $lLogger->log(MessagesErreurs::ERR_603_MSG . " : " . mysql_error(),PEAR_LOG_DEBUG); // Maj des logs
  142. $lVr = new TemplateVR();
  143. $lVr->setValid(false);
  144. $lVr->getLog()->setValid(false);
  145. $lErreur = new VRerreur();
  146. $lErreur->setCode(MessagesErreurs::ERR_603_CODE);
  147. $lErreur->setMessage(MessagesErreurs::ERR_603_MSG);
  148. $lVr->getLog()->addErreur($lErreur);
  149. die($lVr->exportToJson());
  150. } else {
  151. //or die(MessagesErreurs::ERR_BDD_EXECUTION . " : <br>$pRequete<br>".mysql_error());
  152. $lId = mysql_insert_id();
  153. DbUtils::fermerConnexion($lDb);
  154. return $lId;
  155. }
  156. }
  157. /**
  158. * @name prepareRequeteRecherche($pTable, $pChamps, $pTypeRecherche, $pTypeFiltre, $pCritereRecherche, $pTris)
  159. * @todo methode א tester!!!
  160. *
  161. *
  162. * @param string nom de la table
  163. * @param array(string) champs א rיcupיrer dans la table
  164. *
  165. * @param string Le type de critטre de recherche
  166. * @param array(string) champs א rיcupיrer dans la table
  167. * @param array(array(string, object)) Dictionnaire(champ, valeur)) contenant les champs א filtrer ainsi que la valeur du filtre
  168. * @param array(array(string, string)) Dictionnaire(champ, sens) contenant les tris א appliquer
  169. * @return string requךte SQL
  170. */
  171. public static function prepareRequeteRecherche($pTable, $pChamps, $pTypeRecherche, $pTypeFiltre, $pCritereRecherche, $pTypeTri, $pCritereTri) {
  172. if( is_array($pChamps)
  173. && is_array($pTypeRecherche)
  174. && is_array($pTypeFiltre)
  175. && is_array($pCritereRecherche)
  176. && is_array($pCritereTri)
  177. && is_array($pTypeTri)) {
  178. $lFiltres = array();
  179. $i = 0;
  180. foreach($pTypeRecherche as $lTypeRecherche) {
  181. $lLigne = array();
  182. $lLigne['champ'] = StringUtils::securiser($lTypeRecherche);
  183. if(is_array($pCritereRecherche[$i])) {
  184. $lTabCritereRecherche = array();
  185. foreach($pCritereRecherche[$i] as $lCritereRecherche) {
  186. array_push($lTabCritereRecherche,StringUtils::securiser($lCritereRecherche));
  187. }
  188. $lLigne['valeur'] = $lTabCritereRecherche;
  189. } else {
  190. $lLigne['valeur'] = StringUtils::securiser($pCritereRecherche[$i]);
  191. }
  192. array_push($lFiltres,$lLigne);
  193. $i++;
  194. }
  195. $lTris = array();
  196. $i = 0;
  197. foreach($pCritereTri as $lVal) {
  198. array_push($lTris,array('champ' => StringUtils::securiser($pTypeTri[$i]), 'sens' => StringUtils::securiser($lVal)));
  199. $i++;
  200. }
  201. $lResultat = "SELECT ";
  202. $lResultat .= implode(',', $pChamps);
  203. $lResultat .= " FROM " . $pTable;
  204. $lFiltreNonVide = false;
  205. // si il y a des filtres
  206. if(sizeof($lFiltres) > 0 ) {
  207. $lFiltresString = " WHERE(";
  208. $i = 0;
  209. foreach ($lFiltres as $lFiltre) {
  210. if(!empty($lFiltre['champ']) ) {
  211. $lFiltresString .= $lFiltre['champ'];
  212. switch($pTypeFiltre[$i]) {
  213. case "LIKE":
  214. $lFiltresString .= " LIKE '%" . $lFiltre['valeur'] . "%'";
  215. break;
  216. case "=":
  217. $lFiltresString .= " = '" . $lFiltre['valeur'] . "'";
  218. break;
  219. case "<=":
  220. $lFiltresString .= " <= '" . $lFiltre['valeur'] . "'";
  221. break;
  222. case ">=":
  223. $lFiltresString .= " >= '" . $lFiltre['valeur'] . "'";
  224. break;
  225. case "<>":
  226. $lFiltresString .= " <> '" . $lFiltre['valeur'] . "'";
  227. break;
  228. case "<":
  229. $lFiltresString .= " < '" . $lFiltre['valeur'] . "'";
  230. break;
  231. case ">":
  232. $lFiltresString .= " > '" . $lFiltre['valeur'] . "'";
  233. break;
  234. case "in":
  235. if(is_array($lFiltre['valeur'])) {
  236. $lFiltresString .= " in ( ";
  237. foreach($lFiltre['valeur'] as $lVal) {
  238. $lFiltresString .= "'" . $lVal . "',";
  239. }
  240. // suppression de la derniטre virgule
  241. $lFiltresString = substr($lFiltresString , 0, strlen($lFiltresString) - 1);
  242. $lFiltresString .= " )";
  243. } else {
  244. $lFiltresString .= " in ( '" . $lFiltre['valeur'] . "' )";
  245. }
  246. break;
  247. }
  248. $lFiltresString .= " AND ";
  249. $lFiltreNonVide = true;
  250. }
  251. $i++;
  252. }
  253. // suppression du dernier AND
  254. $lFiltresString = substr($lFiltresString , 0, sizeof($lResultat) - 6);
  255. //$lResultat .= '1';
  256. $lFiltresString .= ")";
  257. }
  258. // Permet de vיrifier qu'il y a au moins un filtre non vide
  259. if($lFiltreNonVide) {
  260. $lResultat .= $lFiltresString;
  261. }
  262. // si il y a un tri
  263. if(isset($lTris[0]['champ']) && isset($lTris[0]['sens']) && !empty($lTris[0]['champ']) && !empty($lTris[0]['sens'])) {
  264. $lResultat .= " ORDER BY ";
  265. foreach($lTris as $lTri) {
  266. if(!empty($lTri['champ']) && !empty($lTri['sens'])) {
  267. $lResultat .= $lTri['champ'] . " " . $lTri['sens'] . ",";
  268. }
  269. }
  270. // suppression de la derniטre virgule
  271. $lResultat = substr($lResultat, 0, sizeof($lResultat) - 2);
  272. }
  273. $lResultat .= ";";
  274. return $lResultat;
  275. }
  276. return false;
  277. }
  278. }
  279. ?>