Académique Documents
Professionnel Documents
Culture Documents
DAO deYiiestconstruidosobredeobjetosdedatosPHP(PDO),queesunaextensinfacilitar el acceso de datosunificado para muchos DBMS populares tales como MySQL, PostgreSQL.
Por lo tanto, parautilizar DAO de Yii, laextensin PDO y el driver especfico de PDO base de datos(porejemplo,PDOMYSQL)tienequeserinstalado. YiiDAOconsisteprincipalmenteenlassiguientescuatroclases: CDbConnection:representaunaconexinaunabasededatos. CDbCommand:representaunainstruccinSQLparaejecutarcontraunabasededatos. CDbDataReader:representaunflujodesloavancedefilasdeunconjuntode resultadosdelaconsulta. CDbTransaction:representaunatransaccindeDB. Acontinuacin,presentamoselusodeYiiDAOendiferentesescenarios.
El formato de DSN dependedelcontroladordebasededatosPDOenuso.Engeneral,unDSN consiste en el nombre del controlador PDO, seguido de dos puntos,seguido de la sintaxis de conexin especfica del controlador. Consulte la documentacin de PDO para obtener informacin completa. A continuacin se muestra una lista de los formatos de DSN comnmenteusados:
S Q L i t e :s q l i t e : / p a t h / t o / d b f i l e M y S Q L :m y s q l : h o s t = l o c a l h o s t ; d b n a m e = t e s t d b P o s t g r e S Q L :p g s q l : h o s t = l o c a l h o s t ; p o r t = 5 4 3 2 ; d b n a m e = t e s t d b S Q LS e r v e r :m s s q l : h o s t = l o c a l h o s t ; d b n a m e = t e s t d b O r a c l e :o c i : d b n a m e = / / l o c a l h o s t : 1 5 2 1 / t e s t d b
Debido a que CDbConnection extiende de CApplicationComponent, tambin se puede utilizar como un componente deaplicacin. Para ello, configure en una base dedatos(uotronombre) componentedelaaplicacinenlaconfiguracindelaaplicacindelasiguientemanera,
a r r a y ( . . . . . . c o m p o n e n t s = > a r r a y ( . . . . . . d b = > a r r a y ( c l a s s = > C D b C o n n e c t i o n , c o n n e c t i o n S t r i n g = > m y s q l : h o s t = l o c a l h o s t ; d b n a m e = t e s t d b , u s e r n a m e = > r o o t , p a s s w o r d = > p a s s w o r d , e m u l a t e P r e p a r e = > t r u e ,/ /n e e d e db ys o m eM y S Q Li n s t a l l a t i o n s ) , ) , ) A continuacin, puede acceder alaconexin debasededatosatravsdeYii::app()>dbque ya est activado de forma automtica, a menos que configure manera explcita CDbConnection::autoConnect que es falsa. Con este enfoque, la conexin DBsolosepueden compartirenvarioslugaresdenuestrocdigo.
Una sentencia SQL se ejecuta a travs de CDbCommand de una de las dos siguientes maneras:
execute (): realiza una consulta, no sentencias SQL tales como INSERT, UPDATE y
DELETE. Si tiene xito, devuelve el nmero de filas que se ven afectados por la ejecucin. query(): ejecuta una sentencia SQLquedevuelvefilasdedatos,talescomoSELECT.Si tiene xito, devuelve unainstanciaCDbDataReader desdedondesepuedeatravesarlas filas de datos resultantes. Para mayor comodidad,un conjunto dequeryXXX() mtodos implementadosquedevuelvendirectamentelosresultadosdelaconsulta. SeproduceunaexcepcinsisegeneraunerrordurantelaejecucindesentenciasSQL. $ r o w C o u n t = $ c o m m a n d > e x e c u t e ( ) ; / / nosentenciasSQLtalescomoINSERT,UPDATE,DELETE. $ d a t a R e a d e r = $ c o m m a n d > q u e r y ( ) ; / / ejecutarunaconsultaSQL $ r o w s = $ c o m m a n d > q u e r y A l l ( ) ; / / consultaydevuelvetodaslasfilasdelresultado $ r o w = $ c o m m a n d > q u e r y R o w ( ) ; / / Consultaydevuelvelaprimerafiladeresultado $ c o l u m n = $ c o m m a n d > q u e r y C o l u m n ( ) ; / / consultaydevuelvelaprimeracolumnadelresultado $ v a l u e = $ c o m m a n d > q u e r y S c a l a r ( ) ; / / consultaydevuelveelprimercampodelaprimerafila
foreach($dataReaderas$row){...}//Recuperartodaslasfilasdeunavezenunasolamatriz $rows=$dataReader>readAll() Nota: A diferencia de query (), todos queryXXX () devuelven datos directamente. Por ejemplo,queryRow () devuelve una matriz que representa la primera fila del resultado de la consulta.
Comienzalaoperacin. Ejecutar consultas uno a uno. Las actualizaciones de la basede datos no son visibles paraelmundoexterior. Confirmarlatransaccin.Actualizacionessehacenvisiblessilaoperacintienexito. Siunadelasconsultasfalla,todalatransaccinserevierte. Elflujodetrabajoanteriorsepuedeimplementarmedianteelcdigosiguiente: $ t r a n s a c t i o n = $ c o n n e c t i o n > b e g i n T r a n s a c t i o n ( ) ; t r y { $ c o n n e c t i o n > c r e a t e C o m m a n d ( $ s q l 1 ) > e x e c u t e ( ) ; $ c o n n e c t i o n > c r e a t e C o m m a n d ( $ s q l 2 ) > e x e c u t e ( ) ; / / . . . .o t r a se j e c u c i o nS q l $ t r a n s a c t i o n > c o m m i t ( ) ; } c a t c h ( E x c e p t i o n$ e )/ /s ep r o d u c eu n ae x c e p c i ns iu n ac o n s u l t af a l l a { $ t r a n s a c t i o n > r o l l b a c k ( ) ; }
$ c o m m a n d > b i n d P a r a m ( " : u s e r n a m e " , $ u s e r n a m e , P D O : : P A R A MS T R ) ; / /r e p l a c et h ep l a c e h o l d e r" : e m a i l "w i t ht h ea c t u a le m a i lv a l u e $ c o m m a n d > b i n d P a r a m ( " : e m a i l " , $ e m a i l , P D O : : P A R A MS T R ) ; $ c o m m a n d > e x e c u t e ( ) ; / /i n s e r ta n o t h e rr o ww i t han e ws e to fp a r a m e t e r s $ c o m m a n d > b i n d P a r a m ( " : u s e r n a m e " , $ u s e r n a m e 2 , P D O : : P A R A MS T R ) ; $ c o m m a n d > b i n d P a r a m ( " : e m a i l " , $ e m a i l 2 , P D O : : P A R A MS T R ) ; $ c o m m a n d > e x e c u t e ( ) ;