[3ec149c] | 1 | <?php |
---|
| 2 | /*================================================================================ |
---|
| 3 | Clase para conectar con una base de datos. |
---|
| 4 | |
---|
| 5 | Especificaciones: |
---|
| 6 | - Estado de la conexión($estado) |
---|
| 7 | 0: No conectado |
---|
| 8 | 1: Conectado |
---|
[69f0483] | 9 | 2: Se está intentando conectar |
---|
[3ec149c] | 10 | |
---|
| 11 | ================================================================================*/ |
---|
| 12 | |
---|
| 13 | class Conexion{ |
---|
| 14 | var $basedatos; // Base de datos |
---|
| 15 | var $servidor; // Servidor de Base de datos |
---|
| 16 | var $usuario; // Nombre de usuario |
---|
| 17 | var $password; // Clave de usuario |
---|
| 18 | var $controlador; // Controlador |
---|
| 19 | var $estado; // Estado de la conexion |
---|
| 20 | var $proveedor; // Proveedor de BD |
---|
[8c7b374] | 21 | var $error; // Colección de errores ocurridos durante el proceso (Código de error) |
---|
| 22 | var $ultimoerror; // Último error detectado |
---|
| 23 | var $inderror; // Número de errores ocurridos durante el proceso |
---|
[3ec149c] | 24 | var $msgerrores=array( |
---|
| 25 | "No se ha producido ningn error", |
---|
[8c7b374] | 26 | "001 : conexiónError - La conexión no se pudo establecer", |
---|
| 27 | "002 : conexiónError - Se estableció la conexión con el servidor pero la base de datos no responde", |
---|
[69f0483] | 28 | "003 : conexiónError - No se ha podido cerrar la actual conexión", |
---|
| 29 | "004 : conexiónError - El objeto está ocupado intentando establecer una conexiónanterior", |
---|
| 30 | "005 : conexiónError - La conexiónya está cerrada", |
---|
[3ec149c] | 31 | "006 : conexiónError - No se ha especificado ningn servidor de base de datos", |
---|
| 32 | "007 : conexiónError - No se ha especificado ningn usuario de la base de datos", |
---|
| 33 | "008 : conexiónError - No se ha especificado password de usuario", |
---|
| 34 | "009 : conexiónError - No se ha especificado ninguna base de datos", |
---|
| 35 | "010 : conexiónError - No se ha especificado ningn proveedor de bases de datos", |
---|
| 36 | ); |
---|
| 37 | /*--------------------------------------------------------------------------------------------*/ |
---|
[fc9a1ad] | 38 | function __construct(){ // Constructor de la clase |
---|
[3ec149c] | 39 | $this->inderror=0; |
---|
| 40 | $this->ultimoerror=0; |
---|
| 41 | $this->estado=0; |
---|
| 42 | } |
---|
| 43 | /* ------------------------------------------------------------------------------------------- |
---|
| 44 | Adquiere o actualiza los datos necesarias para establecer conexiones |
---|
| 45 | |
---|
[69f0483] | 46 | Parámetros de entrada: |
---|
[3ec149c] | 47 | servidor: Servidor donde se ubica la base de datos |
---|
| 48 | usuario : Un usuario con acceso al servidor |
---|
| 49 | passwor : Clave de usuario |
---|
| 50 | basedato: Base de datos a la se quiere acceder |
---|
| 51 | proveedor: Proveedor de Base de datos |
---|
| 52 | |
---|
| 53 | Devuelve : |
---|
| 54 | true : Si los datos aportadospara establecer conexiones son correctos |
---|
| 55 | false: En caso contrario |
---|
| 56 | |
---|
[69f0483] | 57 | En el caso de devolver false, la función TomaUltimoError() devuelve el error ocurrido |
---|
[3ec149c] | 58 | ----------------------------------------------------------------------------------------------*/ |
---|
| 59 | function CadenaConexion($servidor,$usuario,$password,$basedatos,$proveedor){ |
---|
| 60 | $this->servidor=$servidor; |
---|
| 61 | $this->usuario=$usuario; |
---|
| 62 | $this->password=$password; |
---|
| 63 | $this->basedatos=$basedatos; |
---|
| 64 | $this->proveedor=$proveedor; |
---|
| 65 | if (!$this->_cadena_conexion()) return(false); else return(true); |
---|
| 66 | } |
---|
| 67 | /* ------------------------------------------------------------------------------------------- |
---|
| 68 | Abre una conexión |
---|
| 69 | |
---|
| 70 | Devuelve : |
---|
| 71 | true : Si la apertura de la conexiónha sido satisfactoria |
---|
| 72 | false: En caso contrario |
---|
| 73 | |
---|
[69f0483] | 74 | En el caso de devolver false, la función TomaUltimoError() devuelve el error ocurrido |
---|
[3ec149c] | 75 | ----------------------------------------------------------------------------------------------*/ |
---|
| 76 | function Abrir(){ |
---|
| 77 | $this->inderror=-1; // Inicializar contador de errores |
---|
| 78 | $this->ultimoerror=-1; |
---|
| 79 | $MAXIMOS_INTENTOS_DE_CONECCION=10; |
---|
| 80 | if (!$this->_cadena_conexion()) return(false); // Comprueba si los datos necesarios para conexiones se han aportado |
---|
| 81 | switch ($this->estado) { |
---|
| 82 | case 1: // Existe actualmente una conexiónabierta que se sustituir�por la nueva |
---|
[55fcaa6] | 83 | if (mysqli_close($this->controlador)){ // Se cierra la conexion actual |
---|
[3ec149c] | 84 | $this->estado=0; |
---|
| 85 | $intentos_de_conexion=0; |
---|
| 86 | while(true){ |
---|
| 87 | $intentos_de_conexion++; |
---|
| 88 | $resul=($this->_nueva_conexion()); |
---|
| 89 | if ($resul || $intentos_de_conexion>$MAXIMOS_INTENTOS_DE_CONECCION) return($resul); |
---|
| 90 | sleep(1); // Espera 1 segundo para intentar la conexiónde nuevo |
---|
| 91 | } |
---|
| 92 | } |
---|
| 93 | else{ // Error al cerrar la conexi� |
---|
| 94 | $this->error[$this->inderror++]=3; |
---|
| 95 | $this->ultimoerror=3; |
---|
| 96 | return(false); |
---|
| 97 | } |
---|
| 98 | break; |
---|
[69f0483] | 99 | case 2: // Actualmente este objeto está ocupado intentando establecer otra conexión |
---|
[3ec149c] | 100 | $this->error[$this->inderror++]=4; |
---|
| 101 | $this->ultimoerror=4; |
---|
| 102 | return(false); |
---|
| 103 | break; |
---|
[69f0483] | 104 | default : // No existe actualmente ninguna conexiónabierta, se abrirá una nueva |
---|
[3ec149c] | 105 | $intentos_de_conexion=0; |
---|
| 106 | while(true){ |
---|
| 107 | $intentos_de_conexion++; |
---|
| 108 | $resul=($this->_nueva_conexion()); |
---|
| 109 | if ($resul || $intentos_de_conexion>$MAXIMOS_INTENTOS_DE_CONECCION) return($resul); |
---|
| 110 | sleep(1); // Espera 1 segundo para intentar la conexiónde nuevo |
---|
| 111 | } |
---|
| 112 | } |
---|
| 113 | } |
---|
| 114 | /* ------------------------------------------------------------------------------------------- |
---|
| 115 | Cierra una conexión |
---|
| 116 | |
---|
| 117 | Devuelve : |
---|
| 118 | true : Si la conexiónse ha cerrado satisfactoriamente |
---|
| 119 | false: En caso contrario |
---|
| 120 | |
---|
[69f0483] | 121 | En el caso de devolver false, la función TomaUltimoError() devuelve el error ocurrido |
---|
[3ec149c] | 122 | ----------------------------------------------------------------------------------------------*/ |
---|
| 123 | function Cerrar(){ |
---|
| 124 | $this->inderror=-1; // Inicializar contador de errores |
---|
| 125 | $this->ultimoerror=-1; |
---|
| 126 | switch ($this->estado) { |
---|
[69f0483] | 127 | case 1: // Actualmente la conexion está abierta |
---|
[55fcaa6] | 128 | if (mysqli_close($this->controlador)){ // Se cierra la conexion actual |
---|
[3ec149c] | 129 | $this->estado=0; |
---|
| 130 | $this->error[$this->inderror++]=0; |
---|
| 131 | $this->ultimoerror=0; |
---|
| 132 | return(true); |
---|
| 133 | } |
---|
[69f0483] | 134 | else{ // Error al cerrar la conexión |
---|
[3ec149c] | 135 | $this->error[$this->inderror++]=3; |
---|
| 136 | $this->ultimoerror=3; |
---|
| 137 | return(false); |
---|
| 138 | } |
---|
| 139 | break; |
---|
[69f0483] | 140 | case 2: // Actualmente este objeto está ocupado intentando establecer otra conexión |
---|
[3ec149c] | 141 | $this->error[$this->inderror++]=4; |
---|
| 142 | $this->ultimoerror=4; |
---|
| 143 | return(false); |
---|
| 144 | break; |
---|
| 145 | |
---|
[69f0483] | 146 | default : // Actualmente la conexión está ya cerrada |
---|
[3ec149c] | 147 | $this->error[$this->inderror++]=5; |
---|
| 148 | $this->ultimoerror=5; |
---|
| 149 | return(false); |
---|
| 150 | } |
---|
| 151 | } |
---|
| 152 | /* ------------------------------------------------------------------------------------------- |
---|
[69f0483] | 153 | Establece una nueva conexión. Este método es privado y sólo lo puede ejecutar la propia |
---|
| 154 | clase desde el método pblico Abrir. |
---|
[3ec149c] | 155 | ----------------------------------------------------------------------------------------------*/ |
---|
| 156 | function _nueva_conexion(){ |
---|
| 157 | $this->estado=2;// Intenta la conexion |
---|
[55fcaa6] | 158 | if ($this->controlador=mysqli_connect($this->servidor,$this->usuario,$this->password)){// Conexion O.K. |
---|
[69f0483] | 159 | $this->estado=1; // La conexion con el servidor se estableció |
---|
[55fcaa6] | 160 | if (mysqli_select_db($this->controlador, $this->basedatos)){// Base datos O.K. |
---|
[3ec149c] | 161 | $this->error[$this->inderror++]=0; |
---|
| 162 | $this->ultimoerror=0; |
---|
| 163 | return(true); |
---|
| 164 | } |
---|
| 165 | else{ // Problemas con la base de datos |
---|
| 166 | $this->error[$this->inderror++]=2; |
---|
| 167 | $this->ultimoerror=2; |
---|
[55fcaa6] | 168 | if (mysqli_close($this->controlador)) $this->estado=0; // Se cierra la conexion |
---|
[3ec149c] | 169 | return(false); |
---|
| 170 | } |
---|
| 171 | } |
---|
| 172 | else{ // Problemas con la conexion |
---|
| 173 | $this->estado=0; |
---|
| 174 | $this->error[$this->inderror++]=1; |
---|
| 175 | $this->ultimoerror=1; |
---|
| 176 | return(false); |
---|
| 177 | } |
---|
| 178 | } |
---|
| 179 | /* ------------------------------------------------------------------------------------------- |
---|
| 180 | Establece una sistema UTF8 para las consultas |
---|
| 181 | ----------------------------------------------------------------------------------------------*/ |
---|
| 182 | function SetUtf8(){ |
---|
[55fcaa6] | 183 | mysqli_query($this->controlador, "SET NAMES 'utf8'"); |
---|
[3ec149c] | 184 | } |
---|
| 185 | /* ------------------------------------------------------------------------------------------- |
---|
| 186 | Revisa y detecta las condiciones que deben cumplir los datos necesarios para establecer |
---|
| 187 | conexiones |
---|
| 188 | |
---|
| 189 | Devuelve : |
---|
| 190 | true : Si los datos aportados son correctos |
---|
| 191 | false: Si algn dato NO ha sido aportado o es incorrecto |
---|
| 192 | |
---|
[69f0483] | 193 | Este método es privado y sólo lo ejecutan métodos pblicos de la propia clase |
---|
[3ec149c] | 194 | ----------------------------------------------------------------------------------------------*/ |
---|
| 195 | function _cadena_conexion(){ |
---|
| 196 | |
---|
| 197 | if ($this->servidor==null){ |
---|
| 198 | $this->error[$this->inderror++]=6; // Servidor no establecido |
---|
| 199 | $this->ultimoerror=6; |
---|
| 200 | return(false); |
---|
| 201 | } |
---|
| 202 | if ($this->usuario==null){ |
---|
| 203 | $this->error[$this->inderror++]=7;// usuario no establecido |
---|
| 204 | $this->ultimoerror=7; |
---|
| 205 | return(false); |
---|
| 206 | } |
---|
| 207 | if ($this->password==null){ |
---|
| 208 | $this->error[$this->inderror++]=8; // password no establecido |
---|
| 209 | $this->ultimoerror=8; |
---|
| 210 | return(false); |
---|
| 211 | } |
---|
| 212 | if ($this->basedatos==null){ |
---|
| 213 | $this->error[$this->inderror++]=9; // base de datos no establecido |
---|
| 214 | $this->ultimoerror=9; |
---|
| 215 | return(false); |
---|
| 216 | } |
---|
| 217 | if ($this->proveedor==null){ |
---|
| 218 | $this->error[$this->inderror++]=10; // proveedor no establecido |
---|
| 219 | $this->ultimoerror=10; |
---|
| 220 | return(false); |
---|
| 221 | } |
---|
| 222 | $this->error[$this->inderror++]=0; // Datos de conexióncorrectos |
---|
| 223 | $this->ultimoerror=0; |
---|
| 224 | return(true); |
---|
| 225 | } |
---|
| 226 | /* ------------------------------------------------------------------------------------------- |
---|
| 227 | Devuelve el c�igo del ltimo error ocurrido durante el proceso anterior. |
---|
| 228 | ----------------------------------------------------------------------------------------------*/ |
---|
| 229 | function UltimoError(){ |
---|
| 230 | return($this->ultimoerror); |
---|
| 231 | } |
---|
| 232 | /* ------------------------------------------------------------------------------------------- |
---|
| 233 | Devuelve una cadena con el mensage del ltimo error ocurrido durante el proceso anterior. |
---|
| 234 | ----------------------------------------------------------------------------------------------*/ |
---|
| 235 | function DescripUltimoError(){ |
---|
| 236 | return($this->msgerrores[$this->ultimoerror]); |
---|
| 237 | } |
---|
| 238 | } |
---|
| 239 | /*========================================================================================= |
---|
| 240 | Clase para usarla con la clase comando. |
---|
| 241 | |
---|
| 242 | Especificaciones: |
---|
| 243 | |
---|
| 244 | Esta clase tiene dos propiedades que definen su contenido |
---|
| 245 | nombre=nombre del parametro |
---|
[69f0483] | 246 | valor = valor de dicho parámetro |
---|
[3ec149c] | 247 | tipo = tipo de parametro: |
---|
[69f0483] | 248 | 0: El valor del parámetro debe ir encerrado entre comillas simples |
---|
| 249 | 1: El valor del parámetro no necesita ir entre comillas simples |
---|
[3ec149c] | 250 | ========================================================================================*/ |
---|
| 251 | class parametro{ |
---|
| 252 | var $nombre; |
---|
| 253 | var $valor; |
---|
| 254 | var $tipo; |
---|
| 255 | /*--------------------------------------------------------------------------------------------*/ |
---|
[fc9a1ad] | 256 | function __construct($nombre="SinNombre", $valor="", $tipo="0"){ // Constructor de la clase |
---|
[3ec149c] | 257 | $this->SetParametro($nombre,$valor,$tipo); |
---|
| 258 | } |
---|
| 259 | /* ------------------------------------------------------------------------------------------- |
---|
| 260 | Modifica los valores de las propiedades de la clase |
---|
| 261 | ----------------------------------------------------------------------------------------------*/ |
---|
| 262 | function SetParametro($nombre,$valor,$tipo){ |
---|
| 263 | $this->nombre=$nombre; |
---|
| 264 | $this->valor=$valor; |
---|
| 265 | $this->tipo=$tipo; |
---|
| 266 | if($tipo==1 && empty($valor)) $this->valor=0; |
---|
| 267 | } |
---|
| 268 | } |
---|
| 269 | /*========================================================================================== |
---|
| 270 | Clase para manipular bases de datos a traves de una conexiónprevia. |
---|
| 271 | |
---|
| 272 | Especificaciones: |
---|
| 273 | |
---|
[69f0483] | 274 | Las sentencias SQL pueden contener parámetros que pueden ser sustituidos por el valor |
---|
| 275 | de los objetos parámetro. Estos parámetros tendrán la forma: @nombre_del_parametro |
---|
[3ec149c] | 276 | ==================================================================================================*/ |
---|
| 277 | class Comando{ |
---|
| 278 | var $texto; |
---|
| 279 | var $Conexion; |
---|
| 280 | var $parametros=array(); |
---|
| 281 | var $Recordset; |
---|
| 282 | var $resul; |
---|
| 283 | var $error; // Error |
---|
| 284 | var $ultimoerror; // Ultimo error detectado |
---|
| 285 | var $inderror; // Contador de errores |
---|
| 286 | var $msgerrores=array( |
---|
| 287 | "No se ha producido ningn error", |
---|
| 288 | "001 : Comando Error - No se ha establecido el texto del comando", |
---|
| 289 | "002 : Comando Error - No se ha establecido la conexióndel comando", |
---|
[16cc9b2] | 290 | "003 : Comando Error - No se ha abierto la conexion", |
---|
| 291 | "004 : Comando Error - La sentencia SQL del comando no es correcta", |
---|
[3ec149c] | 292 | "005 : Comando Error - No se ha podido recuperar el valor @@identity de la ltima clave insertada", |
---|
| 293 | ); |
---|
| 294 | /*--------------------------------------------------------------------------------------------*/ |
---|
[fc9a1ad] | 295 | function __construct(){ // Constructor de la clase |
---|
[3ec149c] | 296 | $this->inderror=0; |
---|
| 297 | $this->ultimoerror=0; |
---|
| 298 | $this->Recordset=new Recordset; |
---|
| 299 | } |
---|
| 300 | /* ------------------------------------------------------------------------------------------- |
---|
[69f0483] | 301 | Devuelve el código del ltimo error ocurrido durante el proceso anterior. |
---|
[3ec149c] | 302 | ----------------------------------------------------------------------------------------------*/ |
---|
| 303 | function UltimoError(){ |
---|
| 304 | return($this->ultimoerror); |
---|
| 305 | } |
---|
| 306 | /* ------------------------------------------------------------------------------------------- |
---|
| 307 | Devuelve una cadena con el mensage del ltimo error ocurrido durante el proceso anterior. |
---|
| 308 | ----------------------------------------------------------------------------------------------*/ |
---|
| 309 | function DescripUltimoError(){ |
---|
| 310 | return($this->msgerrores[$this->ultimoerror]); |
---|
| 311 | } |
---|
| 312 | /* ------------------------------------------------------------------------------------------- |
---|
[69f0483] | 313 | Añade un parámetro a la colección de parametros. La matriz que implementa la colección |
---|
| 314 | es una matriz asociativa cuyo indice asociativo es el nombre del parámetro |
---|
[3ec149c] | 315 | |
---|
[69f0483] | 316 | Parámetros de entrada: |
---|
[3ec149c] | 317 | objparam: Un objeto parametro |
---|
| 318 | ---------------------------------------------------------------------------------------------*/ |
---|
| 319 | function AddParametro($objparam){ |
---|
| 320 | $tbparametro["nombre"]=$objparam->nombre; |
---|
| 321 | $tbparametro["valor"]=$objparam->valor; |
---|
| 322 | $tbparametro["tipo"]=$objparam->tipo; |
---|
| 323 | $this->parametros[]=$tbparametro; |
---|
| 324 | } |
---|
| 325 | /* ------------------------------------------------------------------------------------------- |
---|
[69f0483] | 326 | Añade un parámetro a la colección de parametros. La matriz que implementa la colección |
---|
| 327 | es una matriz asociativa cuyo indice asociativo es el del parámetro |
---|
[3ec149c] | 328 | |
---|
[69f0483] | 329 | Parámetros de entrada: |
---|
| 330 | nombre: El nombre del parámetro |
---|
| 331 | valor : El valor del parámetro |
---|
[3ec149c] | 332 | tipo = tipo de parametro: |
---|
[69f0483] | 333 | 0: El valor del parámetro debe ir encerrado entre comillas simples |
---|
| 334 | 1: El valor del parámetro no necesita ir entre comillas simples |
---|
[b0dd6e2] | 335 | Versión 1.1: Al incluir los valores se escapan caracteres especiales (ticket #777) |
---|
| 336 | Autor: Irina Gómez - ETSII, Universidad de Sevilla |
---|
| 337 | Fecha: 2017-03-30 |
---|
[3ec149c] | 338 | |
---|
| 339 | ---------------------------------------------------------------------------------------------*/ |
---|
| 340 | function CreaParametro($nombre,$valor,$tipo){ |
---|
| 341 | for($i=0;$i<sizeof($this->parametros);$i++){ |
---|
| 342 | if($this->parametros[$i]["nombre"]==$nombre){ |
---|
[55fcaa6] | 343 | $this->parametros[$i]["valor"]=mysqli_real_escape_string($this->Conexion->controlador, $valor); |
---|
[3ec149c] | 344 | return; |
---|
| 345 | } |
---|
| 346 | } |
---|
[55fcaa6] | 347 | $p = new parametro($nombre,mysqli_real_escape_string($this->Conexion->controlador, $valor),$tipo); |
---|
[3ec149c] | 348 | $this->AddParametro($p); |
---|
| 349 | } |
---|
| 350 | |
---|
| 351 | /* ------------------------------------------------------------------------------------------- |
---|
[69f0483] | 352 | Sustituye el valor de un parámetro existente por otro |
---|
| 353 | Parámetros de entrada: |
---|
| 354 | nombre: El nombre del parámetro |
---|
| 355 | valor : El nuevo valor del parámetro |
---|
[43b6d0b] | 356 | Versión 1.1: Al incluir los valores se escapan caracteres especiales (ticket #777) |
---|
| 357 | Autor: Irina Gómez - ETSII, Universidad de Sevilla |
---|
| 358 | Fecha: 2017-03-30 |
---|
[3ec149c] | 359 | ---------------------------------------------------------------------------------------------*/ |
---|
| 360 | function ParamSetValor($nombre,$valor){ |
---|
| 361 | for($i=0;$i<sizeof($this->parametros);$i++){ |
---|
| 362 | if($this->parametros[$i]["nombre"]==$nombre) |
---|
[55fcaa6] | 363 | $this->parametros[$i]["valor"]=mysqli_real_escape_string($this->Conexion->controlador, $valor); |
---|
[3ec149c] | 364 | } |
---|
| 365 | } |
---|
| 366 | /* ------------------------------------------------------------------------------------------- |
---|
[69f0483] | 367 | Establece la conexiónque se usará para ejecutar las acciones pertinentes |
---|
[3ec149c] | 368 | |
---|
[69f0483] | 369 | Parámetros de entrada: |
---|
[3ec149c] | 370 | objconexion: Un objeto conexion |
---|
| 371 | ---------------------------------------------------------------------------------------------*/ |
---|
| 372 | function EstableceConexion($objconexion){ |
---|
| 373 | $this->Conexion= $objconexion; |
---|
| 374 | } |
---|
| 375 | /* ------------------------------------------------------------------------------------------- |
---|
[69f0483] | 376 | Establece la conexiónque se usará para ejecutar las acciones pertinentes |
---|
[3ec149c] | 377 | |
---|
[69f0483] | 378 | Parámetros de entrada: |
---|
| 379 | textocomando: Un texto con la sentencia SQL (Puede contener parámetros) |
---|
[3ec149c] | 380 | ---------------------------------------------------------------------------------------------*/ |
---|
| 381 | function EstableceTexto($textocomando){ |
---|
| 382 | $this->texto=$textocomando; |
---|
| 383 | } |
---|
| 384 | /* ------------------------------------------------------------------------------------------- |
---|
[69f0483] | 385 | Sustituye el valor de los parametros en la expresión que forma el texto del Comando |
---|
[3ec149c] | 386 | ---------------------------------------------------------------------------------------------*/ |
---|
| 387 | function Traduce(){ |
---|
| 388 | $execomando=$this->texto; |
---|
[69f0483] | 389 | if (sizeof($this->parametros)>0){ // Hay parámetros que sustituir |
---|
[3ec149c] | 390 | foreach($this->parametros as $parametro){ |
---|
[69f0483] | 391 | if ($parametro["tipo"]==0) // Tipo alfanumérico |
---|
[3ec149c] | 392 | $execomando=str_replace($parametro["nombre"],"'".$parametro["valor"]."'",$execomando); |
---|
| 393 | else |
---|
| 394 | $execomando=str_replace($parametro["nombre"],$parametro["valor"],$execomando); |
---|
| 395 | } |
---|
| 396 | } |
---|
| 397 | $this->texto=$execomando; |
---|
| 398 | } |
---|
| 399 | /* ------------------------------------------------------------------------------------------- |
---|
| 400 | Ejecuta la sentencia SQL contenida en la propiedad texto |
---|
| 401 | ---------------------------------------------------------------------------------------------*/ |
---|
| 402 | function Ejecutar(){ |
---|
| 403 | $this->inderror=-1; // Inicializar contador de errores |
---|
| 404 | $this->ultimoerror=-1; |
---|
| 405 | if ($this->texto==null){ |
---|
| 406 | $this->error[$this->inderror++]=1; // Texto no especificado |
---|
| 407 | $this->ultimoerror=1; |
---|
| 408 | return(false); |
---|
| 409 | } |
---|
| 410 | else{ |
---|
| 411 | if ($this->Conexion==null){ |
---|
[69f0483] | 412 | $this->error[$this->inderror++]=2; // conexión NO establecida |
---|
[3ec149c] | 413 | $this->ultimoerror=2; |
---|
| 414 | return(false); |
---|
| 415 | } |
---|
| 416 | else{ |
---|
| 417 | if ($this->Conexion->estado==0){ |
---|
| 418 | $this->error[$this->inderror++]=3; // conexiónNO abierta |
---|
| 419 | $this->ultimoerror=3; |
---|
| 420 | return(false); |
---|
| 421 | } |
---|
| 422 | } |
---|
| 423 | } |
---|
| 424 | $this->Traduce(); |
---|
[55fcaa6] | 425 | if (!$this->resul=mysqli_query($this->Conexion->controlador, $this->texto)){ |
---|
[3ec149c] | 426 | $this->error[$this->inderror++]=4; // Error en la sentencia SQL del comando |
---|
| 427 | $this->ultimoerror=4; |
---|
| 428 | return(false); |
---|
| 429 | } |
---|
[631f14e] | 430 | |
---|
| 431 | $sqlstr=trim($this->texto); |
---|
| 432 | |
---|
| 433 | if (strtoupper(substr($sqlstr,0,6))=="SELECT"){ |
---|
[3ec149c] | 434 | $this->Recordset->Inicializar(); |
---|
| 435 | $this->Recordset->filas=$this->resul; |
---|
[55fcaa6] | 436 | $this->Recordset->numerodecampos=mysqli_num_fields($this->Recordset->filas); |
---|
| 437 | $this->Recordset->numeroderegistros=mysqli_num_rows($this->Recordset->filas); |
---|
[3ec149c] | 438 | if ($this->Recordset->numeroderegistros>0){ |
---|
| 439 | $this->Recordset->BOF=false; |
---|
| 440 | $this->Recordset->EOF=false; |
---|
[55fcaa6] | 441 | $this->Recordset->campos=mysqli_fetch_array($this->Recordset->filas); |
---|
[3ec149c] | 442 | } |
---|
| 443 | } |
---|
| 444 | |
---|
| 445 | $this->error[$this->inderror++]=0; // Comando ejecutado correctamante |
---|
| 446 | $this->ultimoerror=0; |
---|
| 447 | return(true); |
---|
| 448 | } |
---|
| 449 | /* ------------------------------------------------------------------------------------------- |
---|
[c870c84] | 450 | Esta función recupera el ltimo nmero asignado a una clave autonum�ica de una tabla |
---|
[3ec149c] | 451 | ---------------------------------------------------------------------------------------------*/ |
---|
| 452 | function Autonumerico(){ |
---|
[55fcaa6] | 453 | $ulreg=mysqli_insert_id($this->Conexion->controlador); |
---|
[3ec149c] | 454 | return($ulreg); |
---|
| 455 | } |
---|
| 456 | } |
---|
| 457 | /*========================================================================================= |
---|
| 458 | Clase para consultar tablas y vistas de una base de datos. |
---|
| 459 | |
---|
| 460 | Especificaciones: |
---|
| 461 | - Estado del recordset ($estado) |
---|
| 462 | 0: Cerrado |
---|
| 463 | 1: Abierto |
---|
| 464 | =========================================================================================*/ |
---|
| 465 | class Recordset{ |
---|
| 466 | var $Comando; |
---|
[69f0483] | 467 | var $filas; |
---|
[3ec149c] | 468 | var $BOF,$EOF,$estado; |
---|
| 469 | var $campos; |
---|
| 470 | var $numeroderegistros,$numerodecampos,$posicion; |
---|
| 471 | |
---|
| 472 | var $error; // Error |
---|
| 473 | var $ultimoerror; // Ultimo error detectado |
---|
| 474 | var $inderror; // Contador de errores |
---|
| 475 | var $msgerrores=array( |
---|
| 476 | "No se ha producido ningn error", |
---|
| 477 | "001 : Recordset Error - Comando no establecido", |
---|
| 478 | "002 : Recordset Error - No se ha establecido la conexióndel comando", |
---|
[16cc9b2] | 479 | "003 : Recordset Error - No se ha abierto la conexion", |
---|
[3ec149c] | 480 | "004 : Recordset Error - No se pudo abrir la consulta", |
---|
[16cc9b2] | 481 | "005 : Recordset Error - La sentencia SQL del comando no contiene la clausula SELECT", |
---|
[3ec149c] | 482 | "006 : Recordset Error - No se puede liberar la consulta", |
---|
| 483 | ); |
---|
| 484 | /*--------------------------------------------------------------------------------------------*/ |
---|
[fc9a1ad] | 485 | function __construct(){ // Constructor de la clase |
---|
[3ec149c] | 486 | $this->Inicializar(); |
---|
| 487 | } |
---|
| 488 | /* ------------------------------------------------------------------------------------------- |
---|
| 489 | Inicializa propiedades de las clase |
---|
| 490 | ----------------------------------------------------------------------------------------------*/ |
---|
| 491 | function Inicializar(){ |
---|
| 492 | $this->BOF=true; |
---|
| 493 | $this->EOF=true; |
---|
| 494 | $this->posicion=0; |
---|
| 495 | $this->numeroderegistros=0; |
---|
| 496 | $this->numerodecampos=0; |
---|
| 497 | $this->estado=0; |
---|
| 498 | } |
---|
| 499 | /* ------------------------------------------------------------------------------------------- |
---|
[69f0483] | 500 | Devuelve el código del ltimo error ocurrido durante el proceso anterior. |
---|
[3ec149c] | 501 | ----------------------------------------------------------------------------------------------*/ |
---|
| 502 | function UltimoError(){ |
---|
| 503 | return($this->ultimoerror); |
---|
| 504 | } |
---|
| 505 | /* ------------------------------------------------------------------------------------------- |
---|
| 506 | Devuelve una cadena con el mensage del ltimo error ocurrido durante el proceso anterior. |
---|
| 507 | ----------------------------------------------------------------------------------------------*/ |
---|
| 508 | function DescripUltimoError(){ |
---|
| 509 | return($this->msgerrores[$this->ultimoerror]); |
---|
| 510 | } |
---|
| 511 | /* ------------------------------------------------------------------------------------------- |
---|
[69f0483] | 512 | Establece el comando que se usará para ejecutar las consultas pertinentes |
---|
[3ec149c] | 513 | |
---|
[69f0483] | 514 | Parámetros de entrada: |
---|
| 515 | objcomando: Un objeto comando con la sentencia SQL (Puede contener parámetros) |
---|
[3ec149c] | 516 | |
---|
| 517 | Devuelve : |
---|
| 518 | true : Si el texto del comando contiene la clausula SELECT |
---|
| 519 | false: En caso contrario |
---|
| 520 | |
---|
[69f0483] | 521 | En el caso de devolver false, la función TomaUltimoError() devuelve el error ocurrido |
---|
[3ec149c] | 522 | ---------------------------------------------------------------------------------------------*/ |
---|
| 523 | function EstableceComando($objcomando){ |
---|
| 524 | $this->inderror=-1; // Inicializar contador de errores |
---|
| 525 | $this->ultimoerror=-1; |
---|
| 526 | if (stristr($objcomando->texto,"select")){ |
---|
| 527 | $this->Comando=$objcomando; |
---|
[69f0483] | 528 | $this->error[$this->inderror++]=0; // Comando válido, contiene "SELECT" |
---|
[3ec149c] | 529 | $this->ultimoerror=0; |
---|
| 530 | return(true); |
---|
| 531 | } |
---|
| 532 | else{ |
---|
| 533 | $this->error[$this->inderror++]=5; // Comando no valido, NO contiene "SELECT" |
---|
| 534 | $this->ultimoerror=5; |
---|
| 535 | return(false); |
---|
| 536 | } |
---|
| 537 | } |
---|
| 538 | /* ------------------------------------------------------------------------------------------- |
---|
[69f0483] | 539 | Sustituye el valor de los parametros en la expresión que forma el texto del Comando |
---|
[3ec149c] | 540 | ---------------------------------------------------------------------------------------------*/ |
---|
| 541 | function Traduce(){ |
---|
| 542 | $execomando=$this->Comando->texto; |
---|
[69f0483] | 543 | if (sizeof($this->Comando->parametros)>0){ // Hay parámetros que sustituir |
---|
[3ec149c] | 544 | foreach($this->Comando->parametros as $parametro){ |
---|
[69f0483] | 545 | if ($parametro["tipo"]==0) // Tipo alfanumérico |
---|
[3ec149c] | 546 | $execomando=str_replace($parametro["nombre"],"'".$parametro["valor"]."'",$execomando); |
---|
| 547 | else |
---|
| 548 | $execomando=str_replace($parametro["nombre"],$parametro["valor"],$execomando); |
---|
| 549 | } |
---|
| 550 | } |
---|
| 551 | $this->Comando->texto=$execomando; |
---|
| 552 | } |
---|
| 553 | /* ------------------------------------------------------------------------------------------- |
---|
| 554 | Recupera registros de la base de datos |
---|
| 555 | ---------------------------------------------------------------------------------------------*/ |
---|
| 556 | function Abrir(){ |
---|
| 557 | $this->inderror=-1; // Inicializar contador de errores |
---|
| 558 | $this->ultimoerror=-1; |
---|
| 559 | if ($this->Comando==null){ |
---|
| 560 | $this->error[$this->inderror++]=1; // Comando no especificado |
---|
| 561 | $this->ultimoerror=1; |
---|
| 562 | return(false); |
---|
| 563 | } |
---|
| 564 | else{ |
---|
| 565 | if ($this->Comando->Conexion==null){ |
---|
| 566 | $this->error[$this->inderror++]=2; // conexiónNO establecida |
---|
| 567 | $this->ultimoerror=2; |
---|
| 568 | return(false); |
---|
| 569 | } |
---|
| 570 | else{ |
---|
| 571 | if ($this->Comando->Conexion->estado==0){ |
---|
| 572 | $this->error[$this->inderror++]=3; // conexiónNO abierta |
---|
| 573 | $this->ultimoerror=3; |
---|
| 574 | return(false); |
---|
| 575 | } |
---|
| 576 | } |
---|
| 577 | } |
---|
| 578 | $this->Traduce(); |
---|
| 579 | $this->Inicializar(); |
---|
[55fcaa6] | 580 | if (!$this->filas=mysqli_query($this->Comando->Conexion->controlador, $this->Comando->texto)){ |
---|
[3ec149c] | 581 | $this->error[$this->inderror++]=4; // Error en la sentencia SQL del comando o al abrir la consula |
---|
| 582 | $this->ultimoerror=4; |
---|
| 583 | return(false); |
---|
| 584 | } |
---|
[69f0483] | 585 | $this->numeroderegistros=mysqli_num_rows($this->filas); // La consulta se ha realizado con éxito |
---|
[55fcaa6] | 586 | $this->numerodecampos=mysqli_num_fields($this->filas); |
---|
[3ec149c] | 587 | if ($this->numeroderegistros>0){ |
---|
| 588 | $this->BOF=false; |
---|
| 589 | $this->EOF=false; |
---|
[55fcaa6] | 590 | $this->campos=mysqli_fetch_array($this->filas); |
---|
[3ec149c] | 591 | } |
---|
| 592 | $this->estado=1; // Recordset abierto |
---|
[69f0483] | 593 | $this->error[$this->inderror++]=0; // Recuperación de registros correcta |
---|
[3ec149c] | 594 | $this->ultimoerror=0; |
---|
| 595 | return(true); |
---|
| 596 | } |
---|
| 597 | /* ------------------------------------------------------------------------------------------- |
---|
| 598 | Libera los registros de una consulta de la base de datos |
---|
| 599 | ---------------------------------------------------------------------------------------------*/ |
---|
| 600 | function Cerrar(){ |
---|
| 601 | $this->inderror=-1; // Inicializar contador de errores |
---|
| 602 | $this->ultimoerror=-1; |
---|
[69f0483] | 603 | mysqli_free_result($this->filas); |
---|
[3ec149c] | 604 | $this->Inicializar(); |
---|
| 605 | $this->error[$this->inderror++]=0; // Recuperaci� de registros correcta |
---|
| 606 | $this->ultimoerror=0; |
---|
| 607 | return(true); |
---|
| 608 | } |
---|
| 609 | /* ------------------------------------------------------------------------------------------- |
---|
| 610 | Mueve el puntero de lectura al siguiente registro del recordset |
---|
| 611 | ---------------------------------------------------------------------------------------------*/ |
---|
| 612 | function Siguiente(){ |
---|
| 613 | if (!$this->EOF){ |
---|
| 614 | $this->posicion++; |
---|
| 615 | if ($this->posicion==$this->numeroderegistros) |
---|
| 616 | $this->EOF=true; |
---|
| 617 | else{ |
---|
[55fcaa6] | 618 | if (mysqli_data_seek($this->filas,$this->posicion)) |
---|
| 619 | $this->campos=mysqli_fetch_array($this->filas); |
---|
[3ec149c] | 620 | } |
---|
| 621 | } |
---|
| 622 | } |
---|
| 623 | /* ------------------------------------------------------------------------------------------- |
---|
| 624 | Mueve el puntero de lectura al anterior registro del recordset |
---|
| 625 | ---------------------------------------------------------------------------------------------*/ |
---|
| 626 | function Anterior(){ |
---|
| 627 | if (!$this->BOF){ |
---|
| 628 | $this->posicion--; |
---|
| 629 | if ($this->posicion<0) |
---|
| 630 | $this->BOF=true; |
---|
[69f0483] | 631 | elseif (mysqli_data_seek($this->filas,$this->posicion)) { |
---|
[55fcaa6] | 632 | $this->campos=mysqli_fetch_array($this->filas); |
---|
[3ec149c] | 633 | } |
---|
| 634 | } |
---|
| 635 | } |
---|
| 636 | /* ------------------------------------------------------------------------------------------- |
---|
| 637 | Mueve el puntero de lectura al primer registro del recordset |
---|
| 638 | ---------------------------------------------------------------------------------------------*/ |
---|
| 639 | function Primero(){ |
---|
| 640 | if ($this->numeroderegistros>0){ |
---|
| 641 | $this->posicion=0; |
---|
[55fcaa6] | 642 | if (mysqli_data_seek($this->filas,$this->posicion)) |
---|
| 643 | $this->campos=mysqli_fetch_array($this->filas); |
---|
[3ec149c] | 644 | } |
---|
| 645 | } |
---|
| 646 | /* ------------------------------------------------------------------------------------------- |
---|
| 647 | Mueve el puntero de lectura al ltimo registro del recordset |
---|
| 648 | ---------------------------------------------------------------------------------------------*/ |
---|
| 649 | function Ultimo(){ |
---|
| 650 | if ($this->numeroderegistros>0){ |
---|
| 651 | $this->posicion=$this->numeroderegistros-1; |
---|
[55fcaa6] | 652 | if (mysqli_data_seek($this->filas,$this->posicion)) |
---|
| 653 | $this->campos=mysqli_fetch_array($this->filas); |
---|
[3ec149c] | 654 | } |
---|
| 655 | } |
---|
| 656 | /* ------------------------------------------------------------------------------------------- |
---|
[69f0483] | 657 | Esta función devuelve una matriz asociativa con el nombre de los campos del recordset |
---|
[3ec149c] | 658 | ---------------------------------------------------------------------------------------------*/ |
---|
| 659 | function DatosNombres(){ |
---|
[55fcaa6] | 660 | if (mysqli_data_seek($this->filas,$this->posicion)) |
---|
| 661 | return(mysqli_fetch_assoc($this->filas)); |
---|
[3ec149c] | 662 | return(""); |
---|
| 663 | } |
---|
| 664 | /* ------------------------------------------------------------------------------------------- |
---|
[69f0483] | 665 | Esta función devuelve información sobre los campos de la tabla |
---|
[3ec149c] | 666 | ---------------------------------------------------------------------------------------------*/ |
---|
| 667 | function InfoCampos(){ |
---|
| 668 | $infocampos= array (); |
---|
[55fcaa6] | 669 | while ($row = mysqli_fetch_field($this->filas)) { |
---|
[3ec149c] | 670 | $campo["name"]=$row->name; |
---|
| 671 | $campo["column_source"]=$row->column_source; |
---|
| 672 | $campo["maxlon"]=$row->max_length; |
---|
| 673 | $campo["numeric"]=$row->numeric; |
---|
| 674 | array_push($infocampos,$campo); |
---|
| 675 | } |
---|
| 676 | return($infocampos); |
---|
| 677 | } |
---|
[8c7b374] | 678 | } |
---|
[69f0483] | 679 | |
---|