Documente Academic
Documente Profesional
Documente Cultură
Usuario
Contrasea
Entrar
o registrate
Buscar..
Foros
Blog
Tutoriales
Cursos
Videotutoriales
Comic
Publica un tutorial
Qu es Cristalab?
Tags
Ejemplos
Buscar
Contctanos
Anime
Qu quieres buscar?
Tutoriales / Crear una clase para conectar a la base de datos (III)
Te puede interesar
Clase de PHP para crear galeras dinmicas Redimensionar imgenes en PHP con
Continuemos mejorando nuestra clase. En el ltimo tip, creamos una clase nueva para leer un fichero de configuracin. Este fichero contena los valores que nos interesase para realizar la conexin a la base de datos. Luego estuvimos adaptando el fichero de conexin a la base de datos para que fuera capaz de instanciar el objeto Conf y pudiera tener acceso a los datos necesarios para realizar la conexin. En esta siguiente parte del tutorial vamos a realizar una sencilla mejora para hacer que nuestra clase sea capaz de conectarse a diferentes tipos de base de datos. En concreto vamos a ver cmo adaptarla para que se conecte a PostgreSQL. Lo primero que debemos realizar es agregar una nueva variable a nuestro fichero de configuracin: config.php
Cdigo :
clases abstractas Certificados de Seguridad y SSL bien explicados Validar formularios HTML con PHP, AJAX y JQuery Como usar AJAX en PHP sin JavaScript (XAJAX) Crear avatares aleatorios en PHP con GD e imgenes PNG Comparar textos usando IA con la Distancia de Levenshtein Envo de correos desde un servidor local
Mostrar todos los tags de tu blog en Wordpress Manejar strings de tamao variable en PHP con str_pad
/ / D a t o sd ec o n f i g u r a c i nd el ac o n e x i nal ab a s ed ed a t o s / / S e r v i d o r $ h o s t = ' l o c a l h o s t ' ; / / U s u a r i o $ u s e r = ' u s e r ' ; / / P a s s w o r d $ p a s s w o r d = ' t e s t ' ; / / B a s ed ed a t o sau t i l i z a r $ d b = ' t e s t D B ' ; / / Q u s i s t e m ag e s t o rd eb a s ed ed a t o su t i l i z a m o s ,m y s q l ,o r a c l e ,. . . $ d b T y p e = ' m y s q l '
Podemos observar una nueva ltima variable llamada dbType la cual utilizaremos para saber que tipo de base de datos vamos a utilizar. Ahora vamos a adaptar nuestra clase Conf para que lea dicho valor y lo guarde ($_dbType). Adems agregaremos una funcin getDBType() para poder obtener dicho valor.
Conf.class.php
Cdigo :
C l a s sC o n f { p r i v a t e$ _ d o m a i n ; p r i v a t e$ _ u s e r d b ; p r i v a t e$ _ p a s s d b ; p r i v a t e$ _ h o s t d b ; p r i v a t e$ _ d b ; p r i v a t e$ _ d b T y p e ; p r i v a t es t a t i c$ _ i n s t a n c e ; p r i v a t ef u n c t i o n_ _ c o n s t r u c t ( ) { r e q u i r e' c o n f i g . p h p ' ; $ t h i s > _ d o m a i n = $ d o m a i n ; $ t h i s > _ u s e r d b = $ u s e r ; $ t h i s > _ p a s s d b = $ p a s s w o r d ; $ t h i s > _ h o s t d b = $ h o s t ; $ t h i s > _ d b = $ d b ; $ t h i s > _ d b T y p e = $ d b T y p e ; } p r i v a t ef u n c t i o n_ _ c l o n e ( ) {} p r i v a t ef u n c t i o n_ _ w a k e u p ( ) {} p u b l i cs t a t i cf u n c t i o ng e t I n s t a n c e ( ) { i f( ! ( s e l f : : $ _ i n s t a n c ei n s t a n c e o fs e l f ) ) { s e l f : : $ _ i n s t a n c e = n e ws e l f ( ) ; } r e t u r ns e l f : : $ _ i n s t a n c e ; } p u b l i cf u n c t i o ng e t U s e r D B ( ) { $ v a r = $ t h i s > _ u s e r d b ; r e t u r n$ v a r ; } p u b l i cf u n c t i o ng e t H o s t D B ( ) { $ v a r = $ t h i s > _ h o s t d b ; r e t u r n$ v a r ; } p u b l i cf u n c t i o ng e t P a s s D B ( ) { $ v a r = $ t h i s > _ p a s s d b ; r e t u r n$ v a r ; } p u b l i cf u n c t i o ng e t D B ( ) { $ v a r = $ t h i s > _ d b ; r e t u r n$ v a r ; } p u b l i cf u n c t i o ng e t D B T y p e ( ) { $ v a r = $ t h i s > _ d b T y p e ; r e t u r n$ v a r ; } }
Por ltimo los cambios ms significativos vienen dentro de nuestra clase Db. Dentro de las funciones de conectar, ejecutar una query y obtener una fila de resultados es dnde podemos ver cmo en funcin del valor tipo de base de datos, la clase utiliza unas funciones u otras. Db.class.php
Cdigo :
/ *C l a s ee n c a r g a d ad eg e s t i o n a rl a sc o n e x i o n e sal ab a s ed ed a t o s* /
C l a s sD b { p r i v a t e$ s e r v i d o r ; p r i v a t e$ u s u a r i o ; p r i v a t e$ p a s s w o r d ; p r i v a t e$ b a s e _ d a t o s ; p r i v a t e$ t i p o ; p r i v a t e$ l i n k ; p r i v a t e$ s t m t ; p r i v a t e$ a r r a y ; p r i v a t es t a t i c$ _ i n s t a n c e ; / * L af u n c i nc o n s t r u c te sp r i v a d ap a r ae v i t a rq u ee lo b j e t op u e d as e r c r e a d om e d i a n t en e w * / p r i v a t ef u n c t i o n_ _ c o n s t r u c t ( ) { $ t h i s > s e t C o n e x i o n ( ) ; $ t h i s > c o n e c t a r ( ) ; } / * M t o d op a r ae s t a b l e c e rl o sp a r m e t r o sd el ac o n e x i n * / p r i v a t ef u n c t i o ns e t C o n e x i o n ( ) { $ c o n f=C o n f : : g e t I n s t a n c e ( ) ; $ t h i s > s e r v i d o r = $ c o n f > g e t H o s t D B ( ) ; $ t h i s > b a s e _ d a t o s = $ c o n f > g e t D B ( ) ; $ t h i s > u s u a r i o = $ c o n f > g e t U s e r D B ( ) ; $ t h i s > p a s s w o r d = $ c o n f > g e t P a s s D B ( ) ; $ t h i s > t i p o = $ c o n f > g e t D B T y p e ( ) ; } / * E v i t a m o se lc l o n a j ed e lo b j e t o .P a t r nS i n g l e t o n * / p r i v a t ef u n c t i o n_ _ c l o n e ( ) {} p r i v a t ef u n c t i o n_ _ w a k e u p ( ) {} / * F u n c i ne n c a r g a d ad ec r e a r ,s ie sn e c e s a r i o ,e lo b j e t o .E s t ae sl a f u n c i nq u ed e b e m o sl l a m a rd e s d ef u e r ad el ac l a s ep a r ai n s t a n c i a re l o b j e t o ,ya s ,p o d e ru t i l i z a rs u sm t o d o s * / p u b l i cs t a t i cf u n c t i o ng e t I n s t a n c e ( ) { i f( ! ( s e l f : : $ _ i n s t a n c ei n s t a n c e o fs e l f ) ) { s e l f : : $ _ i n s t a n c e = n e ws e l f ( ) ; } r e t u r ns e l f : : $ _ i n s t a n c e ; } / * R e a l i z al ac o n e x i nal ab a s ed ed a t o s . * / p r i v a t ef u n c t i o nc o n e c t a r ( ) { s w i t c h( $ t h i s > t i p o ) { c a s e' m y s q l ' : $ t h i s > l i n k = m y s q l _ c o n n e c t ( $ t h i s > s e r v i d o r , $ t h i s > u s u a r i o ,$ t h i s > p a s s w o r d ) ; m y s q l _ s e l e c t _ d b ( $ t h i s > b a s e _ d a t o s , $ t h i s > l i n k ) ; @ m y s q l _ q u e r y ( " S E TN A M E S' u t f 8 ' " ) ; b r e a k ; c a s e' p o s t g r e s s ' : $ t h i s > l i n k = p g _ c o n n e c t ( " h o s t = " . $ t h i s > s e r v i d o r . "d b n a m e = " . $ t h i s > b a s e _ d a t o s . "u s e r = " . $ t h i s > u s u a r i o . " p a s s w o r d = " . $ t h i s > p a s s w o r d ) b r e a k ; b r e a k ; } } / * M t o d op a r ae j e c u t a ru n as e n t e n c i as q l * / p u b l i cf u n c t i o ne j e c u t a r ( $ s q l ) { s w i t c h( $ t h i s > t i p o ) { c a s e' m y s q l ' : $ t h i s > s t m t = m y s q l _ q u e r y ( $ s q l , $ t h i s > l i n k ) ; b r e a k ; c a s e' p o s t g r e s s ' :$ t h i s > s t m t = p g _ E u e r y ( $ t h i s > l i n k , $ s q l ) ; b r e a k ; b r e a k ; } r e t u r n$ t h i s > s t m t ; } / * M t o d op a r ao b t e n e ru n af i l ad er e s u l t a d o sd el as e n t e n c i as q l * /
p u b l i cf u n c t i o no b t e n e r _ f i l a ( $ s t m t , $ f i l a ) { s w i t c h( $ t h i s > t i p o ) { c a s e' m y s q l ' : i f( $ f i l a = = 0 ) { $ t h i s > a r r a y = m y s q l _ f e t c h _ a r r a y ( $ s t m t ) ; } e l s e { m y s q l _ d a t a _ s e e k ( $ s t m t , $ f i l a ) ; $ t h i s > a r r a y = m y s q l _ f e t c h _ a r r a y ( $ s t m t ) ; } b r e a k ; c a s e' p o s t g r e s s ' :i f( $ f i l a = = 0 ) { $ t h i s > a r r a y = p g _ f e t c h _ r o w ( $ s t m t ) ; } e l s e { $ t h i s > a r r a y = p g _ f e t c h _ r o w ( $ s t m t , $ f i l a ) ; } b r e a k ; b r e a k ; } r e t u r n$ t h i s > a r r a y ; } }
En el siguiente y ltima parte, veremos cmo controlar los errores. Un saludo Ficheros del ejemplo (en formato UTF-8 ) Temas relacionados: Crear una clase para conectar a la base de datos Crear una clase para conectar a la base de datos (II)
Tw ittear
clases php
No sera mejor armar una jerarquia teniendo como subclases de Db a Mysql y PosgreSQL ? Saludos!