class.mysql.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. <?php
  2. # ***** BEGIN LICENSE BLOCK *****
  3. # This file is part of DotClear.
  4. # Copyright (c) 2004 Olivier Meunier and contributors. All rights
  5. # reserved.
  6. #
  7. # DotClear is free software; you can redistribute it and/or modify
  8. # it under the terms of the GNU General Public License as published by
  9. # the Free Software Foundation; either version 2 of the License, or
  10. # (at your option) any later version.
  11. #
  12. # DotClear is distributed in the hope that it will be useful,
  13. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. # GNU General Public License for more details.
  16. #
  17. # You should have received a copy of the GNU General Public License
  18. # along with DotClear; if not, write to the Free Software
  19. # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  20. #
  21. # ***** END LICENSE BLOCK *****
  22. # Classe de connexion MySQL
  23. require_once dirname(__FILE__).'/class.recordset.php';
  24. /**
  25. @class connection
  26. @param ressource con_id Identifiant de connexion
  27. @param string error Dernière erreur de la base de données
  28. @param integer errorno Numéro de la dernière erreur
  29. */
  30. class connection
  31. {
  32. var $con_id;
  33. var $error;
  34. var $errno;
  35. /** @doc
  36. === Méthodes === */
  37. /**
  38. @function connection
  39. '''Constructeur'''. Initialise la connection à la base de données.
  40. @param string user ID de l'utilisateur
  41. @param string pwd Mot de passe
  42. @param string alias Serveur auquel se connecter
  43. @param string dbname Nom de la base de données
  44. */
  45. function connection($user, $pwd , $alias='', $dbname)
  46. {
  47. $this->error = '';
  48. $this->con_id = @mysql_connect($alias, $user, $pwd);
  49. if (!$this->con_id) {
  50. $this->setError();
  51. } else {
  52. $this->database($dbname);
  53. }
  54. }
  55. /**
  56. @function database
  57. Change de base de données. Renvoie vrai en cas de succès.
  58. @param string dbname Nom de la base de données
  59. @return boolean
  60. */
  61. function database($dbname)
  62. {
  63. $db = @mysql_select_db($dbname);
  64. if(!$db) {
  65. $this->setError();
  66. return false;
  67. } else {
  68. return true;
  69. }
  70. }
  71. /**
  72. @function close
  73. Ferme la connection à la base de données et renvoie vrai en cas de succès.
  74. @return boolean
  75. */
  76. function close()
  77. {
  78. if ($this->con_id) {
  79. mysql_close($this->con_id);
  80. return true;
  81. } else {
  82. return false;
  83. }
  84. }
  85. /**
  86. @function select
  87. Execute une requête SQL et renvoie le resultat dans une instance de l'objet
  88. dont le type est défini par $class. Le type d'objet par défaut est un
  89. recordset.
  90. N'importe quel objet peut-être utilisé à la place du recordset du moment
  91. qu'il prend un tableau multidimmensionel comme premier argument de son
  92. constructeur.
  93. Cette méthode renvoie false en cas d'erreur.
  94. @param string query Requête SQL
  95. @param string class Type d'objet à renvoyer ('recordset')
  96. @return recordset
  97. */
  98. function select($query,$class='recordset')
  99. {
  100. if (!$this->con_id) {
  101. return false;
  102. }
  103. if ($class == '' || !class_exists($class)) {
  104. $class = 'recordset';
  105. }
  106. $cur = mysql_unbuffered_query($query, $this->con_id);
  107. if ($cur)
  108. {
  109. # Insertion dans le reccordset
  110. $i = 0;
  111. $arryRes = array();
  112. while($res = mysql_fetch_row($cur))
  113. {
  114. for($j=0; $j<count($res); $j++)
  115. {
  116. $arryRes[$i][strtolower(mysql_field_name($cur, $j))] = $res[$j];
  117. }
  118. $i++;
  119. }
  120. return new $class($arryRes);
  121. }
  122. else
  123. {
  124. $this->setError();
  125. return false;
  126. }
  127. }
  128. /**
  129. @function execute
  130. Cette méthode exécute la requête $query et renvoi vrai si aucune erreur
  131. ne s'est produite, faux dans le cas contraire.
  132. @param string query Requête SQL
  133. @return boolean
  134. */
  135. function execute($query)
  136. {
  137. if (!$this->con_id) {
  138. return false;
  139. }
  140. $cur = mysql_query($query, $this->con_id);
  141. if (!$cur) {
  142. $this->setError();
  143. return false;
  144. } else {
  145. return true;
  146. }
  147. }
  148. /**
  149. @function getLastID
  150. Cette méthode renvoie le dernier ID inséré et créé par auto
  151. incrémentation.
  152. @return string
  153. */
  154. function getLastID()
  155. {
  156. if ($this->con_id) {
  157. return mysql_insert_id($this->con_id);
  158. } else {
  159. return false;
  160. }
  161. }
  162. /**
  163. @function rowCount
  164. Cette méthode indique le nombre de lignes affectées par la dernière
  165. opération en DELETE, INSERT, UPDATE.
  166. @return integer
  167. */
  168. function rowCount()
  169. {
  170. if ($this->con_id) {
  171. return mysql_affected_rows($this->con_id);
  172. } else {
  173. return false;
  174. }
  175. }
  176. /**
  177. @function setError
  178. Cette méthode référence la dernière erreur du moteur de base de données
  179. dans les propriétés '''error''' et '''errorno'''.
  180. Le résultat de cette méthode privée est exploitable par la méthode
  181. ''error''.
  182. */
  183. function setError()
  184. {
  185. if ($this->con_id) {
  186. $this->error = mysql_error($this->con_id);
  187. $this->errno = mysql_errno($this->con_id);
  188. } else {
  189. $this->error = (mysql_error() !== false) ? mysql_error() : 'Unknown error';
  190. $this->errno = (mysql_errno() !== false) ? mysql_errno() : 0;
  191. }
  192. }
  193. /**
  194. @function error
  195. Renvoie la dernière erreur de la base de données dans le format
  196. ''numéro'' - ''erreur''. Renvoie faux si aucune erreur.
  197. @return string
  198. */
  199. function error()
  200. {
  201. if ($this->error != '') {
  202. return $this->errno.' - '.$this->error;
  203. } else {
  204. return false;
  205. }
  206. }
  207. /**
  208. @function escapeStr
  209. Cette méthode formate une chaîne de caractères pour la protéger lors de
  210. son insertion dans une requête SQL.
  211. @param string str Chaîne à protéger
  212. @return string
  213. */
  214. function escapeStr($str)
  215. {
  216. return mysql_escape_string($str);
  217. }
  218. }
  219. ?>