Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

acceso a BD Transacciones

Estas en el tema de acceso a BD Transacciones en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Tengo una clase BD que hereda de la clase mysqli. Solo puede existir una instancia de esta clase BD (patron singleton), por tanto tengo dos ...
  #1 (permalink)  
Antiguo 25/02/2008, 04:34
 
Fecha de Ingreso: octubre-2007
Mensajes: 394
Antigüedad: 16 años, 6 meses
Puntos: 2
acceso a BD Transacciones

Tengo una clase BD que hereda de la clase mysqli. Solo puede existir una instancia de esta clase BD (patron singleton), por tanto tengo dos dudas respecto a esto: Creen que habria algun error si muchas personas solicitan hacer al mismo tiempo una query a dicha clase? (yo creo que no). ya que supongo que se ejecutaria primero una, luego otra.....y en caso de ser consultas cada una generaria su objeto Resultado.

Pero el problema viene con las transacciones, ya que si yo le digo a BD que autocommit sea falso para justo hacer una query.............pero justo en ese momento.... una vez que se ha puesto el autocommit en falso......se ejecuta una query PERO DE OTRO USUARIO......... tonces se liaria todo..........no?

he pensado en tener a parte una clase BD_transacciones.........que no tenga el patron singleton....osea que sea normal......y que me sirva para hacer transacciones.......es decir cada vez que alguien quiera hacer una transaccion que haga una instancia DISTINTA de BD_transacction..........asi yo creo que no se liaria nada...que tal lo veis¿
  #2 (permalink)  
Antiguo 25/02/2008, 08:03
 
Fecha de Ingreso: mayo-2006
Mensajes: 120
Antigüedad: 18 años
Puntos: 3
Re: acceso a BD Transacciones

No sé si estás haciendo algo más raro que no llego a entender. Pero creo que estás confundiendo las cosas. Singleton significa que sólo podés crear un objeto/instancia de la clase, pero esto no tiene nada que ver con varios usuarios porque por cada usuario que solicita tu página hay una nueva ejecución de tu script.
Entonces si vos definis un autocommit falso en una ejecución eso no afecta al resto, porque son distintas y no comparten ni la memoria ni los objetos ni nada.

Saludos.
__________________
programación php
  #3 (permalink)  
Antiguo 25/02/2008, 09:34
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: acceso a BD Transacciones

Trasladado a Orientado a Objetos.

drbit tiene razón, las instancias son independientes usen o no singleton, inclusive las conexiones a la base de datos son independientes.

Todo el manejo de las transacciones son menejadas por la base de datos, y usan el concepto ACID (Atomicity, Consistency, Isolation, Durability (Atomicidad, Consistencia, Separacion, Durabilidad)), para que no pasen cosas como las que tu planteas.

Saludos.
  #4 (permalink)  
Antiguo 25/02/2008, 11:10
 
Fecha de Ingreso: octubre-2007
Mensajes: 394
Antigüedad: 16 años, 6 meses
Puntos: 2
Re: acceso a BD Transacciones

Pero aber..........yo estoy usando el patron singleton en una clase llamada BD
Entonces si pepe se mete a la pagina y realiza algo sobre la BD se creara la unica instancia posible de esa clase..........y si justo antes de que se realice toda su tarea........otro usuario se mete en la web y realiza algo contra la base de datos......ya no se podra crear en el sistema del servidor otra instancia de la clase BD por la cual utilizara la que Pepe esta usando........y si pepe justo ha puesto el autocommit a false.......ps este usuario se comera eso, no??

es lo que tiene usar el patron singleton........no? que es imposible que haya dos instancias de la misma clase...........
Por tanto si un usuario ha instanciado esa clase....y ha modificado un atributo de esa clase........cuando otro usuario vaya a cojer la UNICA INSTANCIA EXISTENTE de esa clase...ps la cojera con el valor de los atributos que dejo el anterior que la uso no??


Aprovechando el post............yo nunca suelo cerrar las conexiones a la BD, tengo entendido que al acabar el script PHP se encarga de eso..........como lo veis? puedo tener algun problema haciendolo asi?

Última edición por Blade_Stom; 25/02/2008 a las 11:24
  #5 (permalink)  
Antiguo 25/02/2008, 11:41
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: acceso a BD Transacciones

El patrón singleton te permite tener una única instancia de una clase, pero esto es por nivel de ejecución, por eso si usuario A entra, el tendrá su instancia de la clase, y si entra usuario B, el tendrá su instancia independiente del usuario A.

Saludos.
  #6 (permalink)  
Antiguo 25/02/2008, 11:42
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: acceso a BD Transacciones

Así es, PHP cierra las conexiones, aunque es de buena practica tu cerrarlas, ya que no todos los lenguajes lo hacen, y si te acostumbras a este comportamiento, es probable que si mudas a otro lenguaje en un futuro tengas fugas de memoria.

Saludos.
  #7 (permalink)  
Antiguo 25/02/2008, 15:53
 
Fecha de Ingreso: octubre-2007
Mensajes: 394
Antigüedad: 16 años, 6 meses
Puntos: 2
Re: acceso a BD Transacciones

que me recomiendas ....siempre despues de una query cerrar la conexion? es que lo ideal supongo que seria .......justo al final de la ejecucion del script cerrar la conexion........pero claro......de las conexiones se encargan los modelos y hay veces que una ejecuacion va por un lado....otras veces por otros controladores y modelos.....y es muy dificil saber en cada ejecucion cual sera la ultima query a ejecutar para justro despues cerra la conexion. Entonces seria siempre despues de hacer una query.....cerrar la conexion........pero eso no seria costoso computacionalmente? ya que si en una ejecucion tengo que hacer 5 querys por lados diferentes ......mmmmmmm......5 veces tendria que abrirla y cerrarla, no¿?
Como me recomiendas hacerlo?
  #8 (permalink)  
Antiguo 25/02/2008, 16:00
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: acceso a BD Transacciones

Lo mejor es que en tu clase de acceso a la base de datos, en el destructor cierres la conexión, así no importa cuantos Querys hagas una vez que tu objeto que se encarga de accesar a la base de datos sea borrado de la memoria, se cerrara la conexión.

No te vayas por el camino de abrir y cerrar conexiones por query, con eso harás muchísimo mas lenta tu aplicación y podrás inclusive llegar a tirar el servicio de la base de datos si tienes múltiples visitas.

Saludos.
  #9 (permalink)  
Antiguo 25/02/2008, 16:25
 
Fecha de Ingreso: octubre-2007
Mensajes: 394
Antigüedad: 16 años, 6 meses
Puntos: 2
Re: acceso a BD Transacciones

mmm no entiendo muy bien eso de....en el destructor...........yo no suelo destruir objetos......es necesario? que quieres decir con eso? yo como comente antes....tengo una clase que hereda de mysqli y de la cual solo se puede tener una instancia por ejecucion (patron singleton).... no entiendo muy bien como me propones hacerlo..lo siento...

(por otro lado....sobre lo del destructor......es necesario para liberar memoria ir destruyendo objetos...etc...? yo no suelo destruir nada porque los objetos no son muy grandes y cuando se acabe la ejecucion tengo entendido que se liberara todo....))

Un saludo
  #10 (permalink)  
Antiguo 25/02/2008, 16:35
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: acceso a BD Transacciones

El destructor se llama automáticamente a la hora de PHP destruir los objetos (por eso el nombre de destructor)

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:33.