Dirección Xeral de Educación, Formación Profesional e Innovación Educativa
Material para a formación profesional inicial Familia profesional
IFC
Informática e comunicacións
Ciclo formativo
CSIFC03
Desenvolvemento de aplicacións web
Grao
Superior
Módu Módullo prof rofesio esionnal
MP0 MP0!3 !3
Des Desenvo envollveme vement ntoo web web en cont contoorno rno ser servid vidor
"nidade didáctica
"D
Pro#ramación orientada a ob$ectos en P%P
Actividade
A 02
Acceso a base de datos empregando PD
&utores
'ictor M( )ourido *st+ve,( Mar#arita Pin -odr.#ue,
/ome do aruivo
CSIFC0!1 MP0!31"D01&021PD
© 2010 Xunta de Galicia. Consellería de Educación e Ordenación Universitaria. Aviso Legal: eservados todos os dereitos. A !resente o"ra est# !rote$ida !ola lei% &ue esta"lece esta"lece !enas de !risión e'ou (ultas% ade(ais das co) rres!ondentes inde(ni*acións !or danos e !re$uí*os% !ara &uen re!rodu*a% !la$ie ou distri"+a o seu contido en cal&uera ti!o de so!orte sen a !rece!tiva autori*ación.
,#$ina 1 de -
,#$ina 2 de -
Índice 1.Ficha técnica.....................................................................................................................5 Conte$to da actividade(((((((((((((((((((( actividade((((((((((((((((((((((((((((((((((((( ((((((((((((((((((((((((((((((((( ((((((((((((((((((((((((((((((((( (((((((((((((((((((((((((((((((((( (((((((((((((((((((((((((((((((((( ((((((((((((((((((((((((( (((((((((((((( (((((((((( (((( 4 5.tulo da actividade((((((((((((((((((((( actividade((((((((((((((((((((((((((((((((((((( ((((((((((((((((((((((((((((((((( (((((((((((((((((((((((((((((((((( (((((((((((((((((((((((((((((((((( ((((((((((((((((((((((((((((((((( ((((((((((((((((((((((( ((((((((((((( ((((((((((( (((((((((( ((((( 4 -esultados de aprendi,a$e do curr.culo((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((4 b$ectivos didácticos e t.tulo e descrición da actividade((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((4 Criterios de avaliación((((((((((((((((((((((( avaliación(((((((((((((((((((((((((((((((((((((((( (((((((((((((((((((((((((((((((((( (((((((((((((((((((((((((((((((((( ((((((((((((((((((((((((((((((((( ((((((((((((((((((((((((((((((( ((((((((((((((((((((( ((((((((((( (((((((((( ((((((((( Contidos(((((((((((((((((((((((((((((((((((((( Contidos((((((((((((((((((((( ((((((((((((((((((((((((((((((((( ((((((((((((((((((((((((((((((((( (((((((((((((((((((((((((((((((((( (((((((((((((((((((((((((((((((((( ((((((((((((((((((((((((((((((((( ((((((((((((((((((((((((( ((((((((( (((((( ((((((((((( (((((((( ((( &ctividades de ensino e aprendi,a$e e de avaliación6 m+todos6 recursos e instrumentos de avaliación (((((((((((((((((( ((((((((( (((((((((((((((((( ((((((((((((((((((( ((((((((((((((((((( ((((((((((((((((((( ((((((((((((((((((( (((((((((((((((((( ((((((((((((((((((( ((((((((((((((((((( (((((((((((((((((( ((((((((((((((((((( ((((((((((((((((((( (((((((((((((((((( (((((((((((((((((((((((((((((((((((((((( ((((((((((((((((((((((((((((((( 7
2.A1. Acceso a base de datos em-pregando em-pregando PDO............................................................8 PDO.......................................................... ..8 1.1/ntrod 1.1/n trodució ución...... n................. ..................... ..................... ..................... ..................... ..................... ..................... ..................... ......................................... ............................... 1.2Actividade........................................................................................................................... & e$tensión PD(((((((((((((((((((( PD((((((((((((((((((((((((((((((((((((( (((((((((((((((((((((((((((((((((( (((((((((((((((((((((((((((((((((( ((((((((((((((((((((((((((((((((( ((((((((((((((((((((((((((((((((( (((((((((((((((((((((((((((((((( ((((((((((((((((((((( ((((((((((( ((((((( 8 Cone$ión á base de datos((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( datos(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( (((((((((((((((((((((((((((((((((((((((((((((((( ((((((((((((( 8 *$ecución de consultas(((((((((((((((((((((((((((( consultas((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( (((((((((((((((((((((((((((( !0 Consultas preparadas((((((((((((((((((((((((((((((((((((((((((((((((((((((((( preparadas(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( (((((((((((((((((((((((((((((((((( ( !2 Funcións 9tiles PD(((((((((((((((( PD((((((((((((((((((((((((((((((((((((((((((((((((((( ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ((((((((((((((((((((((((((((((((((((((((((((( (((((((((( !3 5ransaccións(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( 5ransaccións(((((((((((((((((((((((((( ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( (((((((((((((((((((((((((((((((((((((((((((((( (((((((((((( !3
areas.... are as.............. ..................... ..................... ..................... ..................... ..................... ..................... ..................... ..................... ..................... ................................1 .....................1 &utoavaliación(((((((((((((((((((((((((( ((((((((((((((((( ((((((((((((((((((((((((((((((((( ((((((((((((((((((((((((((((((((( (((((((((((((((((((((((((((((((((( (((((((((((((((((((((((((((((((((( ((((((((((((((((((((((((((( ((((((((((((((( (((((((((( (((((((( ((( ! !(2(!5arefa 2( *$ecución de consultas preparadas(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((!8 &utoavaliación(((((((((((((((((((((((((( ((((((((((((((((( ((((((((((((((((((((((((((((((((( ((((((((((((((((((((((((((((((((( (((((((((((((((((((((((((((((((((( (((((((((((((((((((((((((((((((((( ((((((((((((((((((((((((((( ((((((((((((((( (((((((((( (((((((( ((( 20 !(2(25arefa 3( "so de transaccións((((((((((((((((((( transaccións((((((((((((((((((((((((((((((((((( ((((((((((((((((((((((((((((((((( (((((((((((((((((((((((((((((((((( (((((((((((((((((((((((((((((((((( (((((((((((((((((((((((((((((((((( (((((((((((((((((((((((((((((( (((((((((((((((((( ((((((((( (((( 24 &utoavaliación(((((((((((((((((((((((((( ((((((((((((((((( ((((((((((((((((((((((((((((((((( ((((((((((((((((((((((((((((((((( (((((((((((((((((((((((((((((((((( (((((((((((((((((((((((((((((((((( ((((((((((((((((((((((((((( ((((((((((((((( (((((((((( (((((((( ((( 24
1.-e$tos de a!oio ou de reerencia.....................................................................................23 1.4ecursos
did#cticos.........................................................................................................23
3.Avaiaci!n........................................................................................................................3" *$emplo de e$erci,o a reali,ar na proba práctica a reali,ar ao rematar a "(D(((((((((((((((((((((((((((((((((((30 &utoavaliación(((((((((((((((((((((((((( ((((((((((((((((( ((((((((((((((((((((((((((((((((( ((((((((((((((((((((((((((((((((( (((((((((((((((((((((((((((((((((( (((((((((((((((((((((((((((((((((( ((((((((((((((((((((((((((( ((((((((((((((( (((((((((( (((((((( ((( 3!
,#$ina 3 de -
,#$ina # de -
1. Ficha técnica $onte%to da actividade Módulo
Durac ión
MP0'()# Desenvolvemento *eb en contorno servidor#
!nidade did"ctica#
$esió ns %0&
Actividades
$esió ns %0&
(+%
!D0'# Programación de aplicacións *eb con acceso a bases de datos
A0(# Acceso a base de datos M-$./#
(
A02# Acceso a base de datos empregando PD#
(0
2
NOTA: Esta actividade está vinculada á programación recollida no arquivo CSIFC0!"#0$%!&'0$!A0()pd*
&'t(o da actividade 1
3tulo
Descrición
Duración
&02
&cceso a base de datos empre#ando PD
/esta actividade e$plicarase como reali,ar operacións sobre bases de datos coa e$tensión PD(
!0
)es(tados de aprendi*a%e do c(rr'c(o 4esultados de aprendi5a6e do curr3culo
7ompleto
-&( Desenvolve aplicacións de acceso a almac+ns de datos6 aplicando medidas para manter a se#uridade e a inte#ridade da información
on
Ob%ectivos did+cticos e t't(o e descrici!n da actividade b6ectivos espec3ficos !(!
Crear aplicacións ue estable,an &2 cone$ións con bases de datos(
!(2
-ecuperar información dun:a base de datos e visuali,ala nun:a pá$ina web
!(3
Crear apli cacións web ue permitan a actuali,ación e a eliminación de información
Actividade
Descrición b"sica
&cceso a base de datos empre#ando /esta actividade e$plicarase como PD reali,ar operacións sobre bases de datos coa e$tensión PD(
,#$ina 5 de -
Duración !0
dispo;ible nun:a base de datos( !(<
"sar transaccións para manter a consistencia da información(
$riterios de avaiaci!n 7riterios de avaliación C&(2(2 = Creáronse aplicacións ue estable,an cone$ións con bases de datos empre#ando PD C&(3(2 = -ecuperouse información almacenada en bases de datos empre#ando PD C&(< = Publicouse en aplicacións web a información recuperada( C&(4 = "tili,áronse con$untos de datos para almacenar a información( C&((2 = Creáronse aplicacións web ue permitan a actuali,ación e a eliminación de información dispo;ible nun:a base de datos empre#ando PD C&(7(2 = "tili,áronse transaccións para manter a consistencia da información empre#ando PD C&(8 = Probáronse e documentáronse as aplicacións( C&(> = Identificouse a necesidade do uso de consultas preparadas
$ontidos 7ontidos *stablecemento de cone$ións con bases de datos relacionais(
+ & e$tensión PD + Cone$ión á base de datos + Comprobar ue a cone$ión se estableceu correctamente -ecuperación e edición de i nformación(
+ Funcións 9tiles PD 'isuali,ación da información en pá$inas web( "so de con$untos de resultados( Mecanismos de edición da información nun cliente web( *$ecución de senten,as S?)( 5ransaccións( Consultas preparadas
,#$ina , de -
Actividades de ensino e aprendi*a%e e de avaiaci!n métodos rec(rsos e instr(mentos de avaiaci!n .u8 e para 9u8 Actividade :t3tulo e descrición;
A2# Acceso a base de datos empregando PD Crear aplicacións ue estable,an cone$ións con bases de datos( -ecuperar informació n dun:a base de datos e visuali,ala nun:a pá$ina web( Crear aplicacións web ue permitan a actuali,ación e a eliminación de información dispo;ible nun:a base de datos( "sar transacció ns para manter a consistencia da información(
7ómo Profesorado :en termos de tarefas;
p(#( *$plicación por parte do profesor de cómo reali,ar cone$ións a bases de datos M@S?) empre#ando a e$tensión PD p(#2 *$plicación sobre como reali,ar consultas e as distintas posibilidades ue e$isten para tratar o con$unto de resultados p(#) *$plicación por parte do profesor do uso das consultas preparadas empre#ando PD p(# *$plicación por parte do profesor do uso de transaccións empre#ando PD
Alumnado :tarefas;
a(#(( Pro#ramacion de scrip ts ue e$ecutan consultas e amosan información da base de datos obtendo os resultados de diferentes maneiras empre#ando PD( a(#2 ( -eali, ación de operacións empre#ando consultas preparadas a(#) ( -eali,ación de operacións ue implican o uso de transaccións empre#ando PD a(# ( -eali,ación dun:a proba práctica relativa ao e$plicado nesta actividade
4esultados ou produtos
Scripts coas solucións as tarefas Scripts coa solución á proba práctica
7on 9u8
7ómo e con 9u8 se valora
4ecursos
Instrumentos e procedementos de avaliación
Software de servidor web &pac:e ou semellante( Int+rprete da lin#ua$e P%P( Contorno de desenvolvemento de ap li ca ci óns web /etAeans ou semellante( /ave#ador web Firefo$ ou semellante &puntes proporcionados polo profesor
Proba escrita relativa á reali,ación das tarefas propostas ao alumnado e proba práctic a rela tiva á actividade
Duración :sesións;
!0
2. A1. Acceso a base de datos empregando PDO 1.1
ntrod(ci!n Esta actividade ten como o,-ectivos: Identi*icar os principios ,ásicos da programación en capas e a s.a aplicación empregando a lingua-e #/#)
1.2
Coecer as vanta-es da programación en capas *ronte a programación estruturada tradicional)
Actividade A e%tensi!n PDO
#'O 1#/# 'ata O,2ects3 4 un5a e-tensión de #/# que permite a,straerse do sistema -estor de ,ase de datos que se est4 a usar) A e-tensión "6S78i 4 un5a ,oa opción para programar un5a aplicación que utilice como sistema -estor de ,ases de datos "6S78: O*rece acceso a todas as caracter9sticas do motor de ,ase de datos á ve; que reduce os tempos de espera na e-ecución de senten;as) Non o,stante se no *uturo tes que cam,iar o S<=' por outro distinto terás que volver programar gran parte do código desta) #or iso antes de come;ar o desenvolvemento 4 moi importante revisar as caracter9sticas espec9*icas do pro-ecto) No caso de que e-ista a posi,i> lidade presente ou *utura de utili;ar outro servidor como almacenamento de,erás adoptar un5a capa de a,stracción para o acceso aos datos) E-isten varias alternativas como O'=C pero sen d.,ida a opción máis recomenda,le na actualidade 4 #'O) O o,-ectivo 4 que se c5egado o momento necesitas cam,iar o servidor de ,ase de datos as modi*icacións que de,as reali;ar no teu código se-an m9nimas) "esmo 4 posi,le desen> volver aplicacións preparadas para utili;ar un almacenamento ou outro segundo se indique no momento da e-ecución pero este non 4 o o,-ectivo principal de #'O) #'O non a,strae de *orma completa o sistema -estor que se utili;a) #or e-emplo non modi*ica as senten;as S78 para adaptalas ás caracter9sticas espec9*icas de cada servidor) Se isto *ose necesario 5a,er9a que programar un5a capa de a,stracción completa) A e-tensión #'O de,e utili;ar un driver ou controlador espec9*ico para o tipo de ,ase de datos que se utilice) #odes consultar os controladores dispoi,les na t.a instalación de #/# na in*ormación que proporciona a *unción p5pin*o) "entres que a e-tensión "6S78i permite programación estructurada e programación orientada a o,-ectos #'O ,as4ase unicamente nas caracter9sticas de orientación a o,-ectos de #/#) #ara acceder ás *uncionalidades da e-tensión tes que empregar os o,-ectos que o*rece cos seus m4todos e propiedades) Non e-isten *uncións alternativas) Cone$ión # "ase de datos
#ara esta,lecer un5a cone-ión cun5a ,ase de datos utili;ando #'O de,es instanciar un o,-ecto da clase #'O pasándolle os seguintes parámetros 1só o primeiro 4 o,rigatorio3: ,#$ina 8 de -
orixe de datos (DSN) : ? un5a cadea de te-to que indica o tipo de -estor de ,ase de datos
ao que se vai conectar #'O seguido do nome da ,ase de datos e do 5ost no que se atopa a ,ase de datos) nome de usuario con permisos para esta,lecer a cone-ión)
contrasinal do usuario)
opcións de conexión almacenadas en *orma de arra6)
#or e-emplo para esta,lecer un5a cone-ión coa ,ase de datos @receita@ *ariamos o seguin> te: $db = new PDO('mysql:host=localhost;dbname=receitas', 'alumno', 'abc12!'";
Se como no e-emplo se utili;a o controlador para "6S78 os parámetros espec9*icos para utili;ar na cadea 'SN 1separada un5as doutras polo carácter punto e coma3 a continua> ción do pre*i-o #mysql:# son os seguintes:
host : Nome ou dirección I# do servidor) Port : N.mero de porto TC# no que escoita o servidor) dbname: Nome da ,ase de datos)
sistemas &ni-) Se qui-eses indicar ao servidor "6S78 utilice codi*icación &TF>B para os datos que se transmitan podes usar un5a opción espec9*ica da cone-ión:
unix_socket: Socet de "6S78 en
$ocions = array(PDO::%&)*+-*./.*0O%%+/D = # /+% ut34#"; $db = new PDO('mysql:host=localhost;dbname= receitas', 'alumno', 'abc12!', $ocions";
&n5a ve; esta,lecida a cone-ión podes utili;ar o m4todo 5et+ttribute para o,ter in> *ormación do estado da cone-ión e set+ttribute para modi*icar alg.ns dos parámetros que a*ectan a esta) #or e-emplo para o,ter a versión do servidor podes *acer: $6ersion = $db75et+ttribute(PDO::+-*-8-*8-.O/"; rint #8ersi9n: $6ersion#;
E se queres por e-emplo que c5e devolva todos os nomes de columnas en mai.sculas: $db7set+ttribute(PDO::+-*0+, PDO::0+*PP-";
Comprobar ue a cone$ión se estableceu correctamente
#'O permite noti*icar os erros lan;ando e-cepcións a trav4s da clase PDOcetion ) Se temos activadas as e-cepcións cando se produce un erro se-a na cone-ión ou nun5a consulta saltará un5a e-cepción que poderemos capturar) Co m4todo set+ttribute podemos modi*icar o atri,uto PDO::+-*--%OD para indicar como será o tratamento de e-cepcións) Este atri,uto pode tomar os seguintes valores:
PDO::--%OD*.)/ :
4 o valor por de*ecto) #'O simplemente esta,lecerá 4l mismo o código de erro para a s.a inspección usando os m4todos PDO::error0ode(" 6 PDO::error.n3o("!
PDO::--%OD*<+-/./: Ademáis
de esta,lecer o código de erro #'O emitirá un5a mensa-e E!ADNIN tradicional) Esta con*iguración 4 .til durante a depuración e pro,as se queres ver qu4 pro,lemas teen ocurrido sen interrumpir o *lu-o da aplicación) ,#$ina / de -
ademáis de esta,lecer o código de erro #'O lan;ará un5a e-cepción de tipo #'OE-ception e esta,lecerá as s.as propiedades para re*le-ar o erro e a in*ormación do mesmo) PDO::--%OD*>0P.O/:
try? $db = new PDO('mysql:host=localhost;dbname=receitas', 'alumno', 'abc12!'"; $db7set+ttribute(PDO::+-*--%OD, PDO::--%OD*>0P.O/"; @catch(PDOcetion $e" ? rint $e75et%essa5e("; @
Descone$ión da base de datos
&n5a ve; rematado o tra,allo coa ,ase de datos ,asta con eliminar as re*erencias ao o,-ecto para que se pec5e a cone-ión e se li,eren os recursos) $db = null;
E$ecución de consultas
Na s.a *orma máis ,ásica e-ecutar un5a consulta con #'O pode ser e-actamente igual que con calquera das outras e-tensións) Se a consulta -era un con-unto de datos como 4 o caso de )0 usaremos o m4todo query que devolve un o,-ecto da clase PDOtatement! Ao igual que coa e-tensión "6S78i en #'O tes varias posi,ilidades para tratar co con> -unto de resultados devolto polo m4todo quer6) 3etch(" : O,ten a seguinte *ila dun con-unto de resultados 1ou *alse cando -a non quedan máis re-istros3) #olo que teremos que empregar un ,ucle para percorrer todos os resultados 1*ilas3 da e-ecución da consulta)
$db = new PDO('mysql:host=localhost;dbname=receitas', 'alumno','abc12!'"; $stmt = $db7query(#)0 nome, di3icultade A-O% receita#"; while($3ila = $stmt73etch("" ? echo $3ilaB'nome'C!# (#!$3ilaB'di3icultade'C!#"br E#; @
#or de*ecto o m4todo *etc5 -era e devolve a partir de cada re-istro un arra6 con cla> ves num4ricas e asociativas) #ara cam,iar o seu comportamento admite un parámetro opcional que pode tomar un dos seguintes valores: o PDO::A0F*+O0 : 'evolve só un arra6 asociativo) o PDO::A0F*/%: 'evolve só un arra6 con claves num4ricas) o PDO::A0F*GOF: 'evolve un arra6 con claves num4ricas e asociativas) ? o comportamento por de*ecto) o PDO::A0F*OGH: 'evolve un o,-ecto cu-as propiedades se corresponden cos campos do re-istro) $stmt = $db7query(#)0 nome, di3icultade A-O% receita#"; while($3ila = $stmt73etch(PDO::A0F*OGH"" ? echo $3ila7nome!# (#!$3ila7di3icultade!#"br E#; @
o PDO::A0F*)+I&: 'evolve tanto o o,-ecto coma o arra6 con clave dual anterior) o PDO::A0F*GO/D: 'evolve true e asigna os valores do re-istro a varia,les segundo se indique co m4todo bind0olumn) Este m4todo de,e ser c5amado un5a ve; ,#$ina 1" de -
por cada columna indicando en cada c5amada o n.mero de columna 1empe;ando en %3 e a varia,le a asignar) $stmt = $db7query(#)0 nome, di3icultade A-O% receita#"; $stmt7bind0olumn(1, $nome"; $stmt7bind0olumn(2, $di3icultade"; while ($reistro = $stmt73etch(PDO::A0F*GO/D"" ? echo $nome!# (#!$di3icultade!#"br E#; @
3ecth+ll(": 'evolve
un arra6 que cont4n todas as *ilas do con-unto de resultados) "entras que con *ect5 o,tiamos un arra6 cos campos dun5a *ila agora o,temos un5a matri; 1arra6 de arra6s3 de d.as dimensións) $stmt = $db7query(#)0 nome, di3icultade A-O% receita#"; $resultado = $stmt73etch+ll("; 3oreach ($resultado as $3ila" ? echo $3ilaB#nome#C!# (#!$3ilaB#di3icultade#C!#"br E#; @
Ao igual ca *unción 3etch(" admite un valor como parámetro que determinará cómo devolverá a *unción os resultados) Novamente A0F*GOF 4 o valor por de*ecto)
3etchObJect(": O,t4n a seguinte *ila e devólvea como un o,-ecto) 'o mesmo -eito que coa *unción 3etch*obJect da e-tensión mysqli podemos pasar dous parámetros
1opcionais3 a esta *unción: O primeiro ser9a o nome da clase a instanciar e o segundo un arra6 opcional de parámetros a pasar ao construtor de dita clase) Os campos da *ila do con-unto de resultados) Os campos da *ila pasan a ser atri,utos p.,licos da clase co cal poderemos acceder a estes dentro da clase sen necesidade de de*inilos) #ero 4 un5a ,oa práctica de*inilos na clase) No caso de de*inilos o nome de,e coincidir co nome da columna) Se non lle pasamos ning.n parámetro simplemente accederemos ás columna da *ila como se esta *ose un o,-ecto e as columnas *osen propiedades 1o que 4 similar a usar o m4todo 3etch con PDO::A0F*OGH) class receita? ublic $nome; ublic $di3icultade; ublic 3unction maiusculasDi3icultade(" ? return strtouer($this7di3icultade"; @ @ try? $db = new PDO('mysql:host=localhost;dbname=receitas', 'alumno', 'abc12!'"; $stmt = $db7query(#)0 nome, di3icultade A-O% receita#"; while ($resultado = $stmt73etchObJect('receita'"" ? echo $resultado7nome!# (#!$resultado7maiusculasDi3icultade("! #"br E#; @ @catch(PDOcetion $e" ? rint $e75et%essa5e("; @
Non se aconsella empregar o m4todo quer6 para senten;as con parámetros e-ternos) No caso de usalo de,eremos acompaalo do m4todo quote(" para indicar que queremos esca> par 1antepoer 'K' aos caracteres pro,lemáticos3 un valor) Tam4n poderiamos usar mysq7 li*real*escae*strin5(" ou real*escae*strin5(" dependendo de se estamos a usar un5a inter*ace procedemental ou orientada a o,-ectos) ,#$ina 11 de -
$stmt = $db7query(')0 nome A-O% receita
Na tare*a % e-ecutaremos consultas e amosaremos in*ormación da ,ase de datos o,tendo os resultados de di*erentes maneiras) Consultas !re!aradas
Ao igual que con %y)i tam4n utili;ando PDO podemos preparar consultas parametri;adas no servidor para e-ecutalas de *orma repetida) O procedemento 4 similar e mesmo os m4todos a e-ecutar teen practicamente os mesmos nomes) #ara preparar un5a consulta no servidor "6S78 de,erás utili;ar o m4todo reare da clase PDO) Este m4todo devolve un o,-ecto da clase PDOtament e encárgase de escapar os parámetros que se lle pasen evitando pro,lemas coa in-ección de S78) Este o,-ecto 4 o que imos usar nas posteriores vinculacións e-ecucións e recollida de resultados) Os parámetros pódense marcar utili;ando signos de consulta como no caso anterior: $stmt = $db7reare(')0 M A-O% che3
Ou pode indicarse o nome do parámetro de su,stitución precedido por dous (:") $stmt = $db7reare(')0 M A-O% che3
&tilicemos un5a alternativa ou outra o seguinte paso 4 vincular un valor aos parámetros de su,stitución) E para isto usaremos a *unción bind8alue(" ou bindParam(") As9 se usamos parámetros con nome para vincular o valor *ariamos: $stmt7bind8alue(':aram*nome', $nome"; $stmt7bind8alue(':aram*aelido1', $aelido1";
E se optamos polos signos de consulta (N" o primeiro parámetro indica a posición na consulta do campo a vincular mentras que coa sinta-e (:" especi*icamos o campo a vincu> lar na consulta: $stmt7bind8alue(1, $nome"; $stmt7bind8alue(2, $aelido1";
Ademáis do nome do párametro e o seu valor pdemos indicar o tipo dos parámetros em> pregando as seguintes constantes prede*inidas de #'O: o #'O::#ADA"!=OO8 o #'O::#ADA"!N&88 o #'O::#ADA"!INT o #'O::#ADA"!STD o #'O::#ADA"!8O= As *uncións bindParam(" e bind8alue(" son similares) A di*eren;a 4 que:
Con bindParam(" só se poden pasar varia,les) Non se poden pasar valores directamente) So *unciona coas varia,les de,ido a que unicamente permite parámetros por re*erencia 1e un valor non 4 un5a re*erencia válida en #/#3) Con bind8alue(" pódense pasar tanto valores como varia,les) ,#$ina 12 de -
&n5a ve; preparada a consulta e enla;ados os parámetros cos seus valores e-ec.tase a consulta utili;ando o m4todo eecute("! $stmt7eecute(";
&n5a caracter9stica importante desta *unción 4 que permite opcionalmente asignar valo> res dos parámetros no momento de e-ecutar a consulta) #ara isto usaremos un arra6 1aso> ciativo ou con claves num4ricas dependendo da *orma en que indicases os parámetros3 na c5amada a e-ecute) $arametros = array(':nome' = '>O)', ':aelido1' = '+-0+'"; $consulta7eecute($arametros";
5uncións +tiles ,6O
A continuación imos ver algun5as *uncións .tiles cando usamos PDO: lastInsertId
A *unción last.nsert.d(" devolve o id da .ltima *ila insertada na ,ase de datos) #ode pasárselle como parámetro o nome da columna e como #'O depende dos drivers do siste> ma -estor de ,ase de datos que se est4 a usar nalg.ns casos 4 necesario especi*icar o nome da columna que almacena os identi*icadores) Esta 4 un5a *unción da clase PDO) $stmt = $db7reare('./- ./O libro (titulo, editorial,cod*che3" 8+) (:tit,:edi,:che3"'"; $stmt7eecute(B':tit' = '-ecetas ara nenos', ':edi' = '-ico7-ico',':che3' = C"; 6ar*dum($db7last.nsert.d("";
rowCount
A *unción row0ount(" devolve o n.mero de *ilas a*ectadas pola ultima senten;a de in> serción ,orrado ou actuali;ación) Esta 4 un5a *unción da clase PDOtatement ) $stmt = $db7reare('D) A-O% ).G-O
#'O non asegura que a *unción row0ount(" *uncione correctamente en todos os siste> mas -estores de ,ases de datos para senten;as de tipo )0 ) Na tare*a ( usaremos consultas preparadas para aquelas consultas que tean parámetros) ransaccións
Como -a vimos na actividade anterior as transaccións son un mecanismo que nos asegura que todas as consultas que *orman parte dun5a operación se e-ecutan de *orma segura e no caso de que *alle algun5a das consultas a transacción non se levará a ca,o) Como PDO 4 un5a capa de a,stracción so,re m.ltiples tipos de -estores de ,ases de datos e cada un dos -estores ten regras di*erentes pode suceder que alg.n destes non admita o mecanismo de transaccións) #or e-emplo en "6S78 non todos os motores de almacena> mento de tá,oas soportan transaccións) Os tipos de tá,oas %y.+% non permiten transac> cións mentras que as tá,oas .nnoDG s9 as permiten) ,#$ina 13 de -
Ao igual que pasa,a con %y)i por de*ecto PDO tra,alla en modo autocommit isto 4 con*irma de *orma automática cada senten;a que e-ecuta o servidor) #olo tanto o primeiro que teremos que *acer e desactivar o modo autocommit para poder indicar onde remata a nosa transacción) Isto *aise coa *unción be5inransaction(" que marca o inicio dun5a nova transacción) A transacción *inali;ará cando se e-ecute un dos seguinte m4todos: commit(" para con> *irmar a transacción actual ou rollbacL(" para reverter os cam,ios levados a ca,o na transacción actual en caso de producirse alg.n erro) A clase #'O ten un5a *unción eec(strin5 $statement" que e-ecuta un5a senten;a sql e devolve o numero de *ilas a*ectadas por esta) E similar a query(" pero unicamente 4 adecuada para consultas de acción -a que non devolve os resultados dun5a senten;a 7 )0) 'e,emos ter en conta que se-a cal se-a o resultado dun5a transacción a cone-ión á ,ase de datos volve estar en modo autocommit ata que iniciemos un5a nova transacción con be7 5inransaction(" ) $bandeira = true; $db7be5inransaction("; i3($db7eec('D) R'" == S" $bandeira = 3alse; i3($db7eec('PD+ R'" == S" $bandeira = 3alse; R i3($bandeira" $db7commit("; EE e todo 3oi ben con3irma os cambios else $db7rollbacL("; EE e se non, re6Trteos
Na tare*a e-ecutaremos operacións que implican o uso de transaccións)
,#$ina 1# de -
&are0as As tare*as propostas son as seguintes) Tare*a %) Execución de consultas) Nesta tare*a %e-ecutaremos consultas e amosaremos in*ormación da ,ase de datos o,tendo os resultados de di*erentes maneiras)
Tare*a () Execución de consultas preparadas ) Nesta tare*a usaremos consultas preparadas para aquelas consultas que tean parámetros) Tare*a ) Uso de transaccións ) Nesta tare*a e-ecutaremos operacións que implican o uso de transaccións)
,#$ina 15 de -
Tare*a %) E-ecución de consultas aB 5arefa !1a
Empregando #'O amosa a seguinte in*ormación da ,ase de datos receitas) O resultado de,es o,telo como un5a matri; onde cada *ila 4 un re-istro devolto pola consulta:
bB 5arefa !1b
Agora amosa o mesmo resultado pero asignando os valores do re-istro a varia,les) cB 5arefa !1c
Nesta tare*a queremos o,ter cada *ila como un o,-ecto dun5a clase que teremos creada e que terá dous m4todos para dar *ormato ao nome da receita e do c5e* como se ve a continua> ción:
A(toavaiaci!n aB 5arefa !1a html head .)-eceitasE.) linL rel=#stylesheet# hre3=#!!EublicEtare3as!css# E Ehead body di6 id=#contido# h1).+DO D -0.+Eh1 table tr th-0.+Eth thD.A.0)+DEth th%POEth th0FAEth thE Etr Nh $ser6idor = #localhost#; $base = #receitas#; $usuario = #alumno#; $contrasinal = #abc12!#; try? EEstablecemos a conei9n co ser6idor ,#$ina 1, de -
$db= new PDO('mysql:host='!$ser6idor!';dbname='!$base, $usuario, $contrasinal"; $sql = ')0 receita!nome, di3icultade,temo, nomeartistico ' ! 'A-O% receita inner Join che3 on cod*che3=che3!codi5o' ! ' order by nomeartistico'; $stmt = $db7query($sql"; EM 8olcamos o resultado da consulta na 6ariable reistros: un array de arrays onde cada 3ila T unha 3ila de6olta ola consulta ME $3ilas = $stmt73etch+ll("; 3oreach ($3ilas as $3ila" ? echo #tr td#!$3ilaB'nome'C!#Etd td#!$3ilaB'di3icultade'C!#Etd td#!$3ilaB'temo'C!#Etd td#!$3ilaB'nomeartistico'C!#Etd Etr#; @ echo 'Etable'; $db = null; @catch(PDOcetion $e" ? rint $e75et%essa5e("; @ N
bB 5arefa !1b
Neste caso teriamos que modi*icar o -eito no que recuperamos o resultado como se ve a continuación: $stmt = $db7query($sql"; EE+si5namos o resultado da consulta a 6ariables $stmt7bind0olumn(1, $nome"; $stmt7bind0olumn(2, $di3icultade"; $stmt7bind0olumn(, $temo"; $stmt7bind0olumn(, $nomeartistico"; while ($reistro = $stmt73etch(PDO::A0F*GO/D"" ? echo #tr td#!$nome!#Etd td#!$di3icultade!#Etd td#!$temo!#Etd td#!$nomeartistico!#Etd Etr#; @ echo 'Etable';
cB 5arefa !1c html head .)-eceitasE.) linL rel=#stylesheet# hre3=#!!EublicEtare3as!css# E Ehead body di6 id=#contido# h1).+DO D -0.+Eh1 table tr th-0.+Eth thD.A.0)+DEth th%POEth th0FAEth thE Etr Nh class receita? ublic $nome; ublic $di3icultade; ,#$ina 1 de -
ublic $temo; ublic $nomeartistico; ublic 3unction 3ormatear/ome(" ? return substr($this7nome,S,1"! mb*strtolower(substr($this7nome,1,strlen($this7nome"""; @ ublic 3unction 3ormatear0he3(" ? return substr($this7nomeartistico,S,1"! mb*strtolower(substr($this7nomeartistico,1, strlen($this7nomeartistico"""; @
@
$ser6idor = #localhost#; $base = #receitas#; $usuario = #alumno#; $contrasinal = #abc12!#; try? EEstablecemos a conei9n co ser6idor $db= new PDO('mysql:host='!$ser6idor!';dbname='!$base, $usuario, $contrasinal"; $sql = ')0 receita!nome, di3icultade,temo, nomeartistico ' ! 'A-O% receita inner Join che3 on cod*che3=che3!codi5o' ! ' order by nomeartistico'; $stmt = $db7query($sql"; EE8olcamos o resultado da consulta nun obecto da clase receita while ($resultado = $stmt73etchObJect('receita'"" ? echo #tr td#!$resultado73ormatear/ome("!#Etd td#!$resultado7di3icultade!#Etd td#!$resultado7temo!#Etd td#!$resultado73ormatear0he3("!#Etd Etr#; @ echo 'Etable'; $db = null; @catch(PDOcetion $e" ? rint $e75et%essa5e("; @ N
1.2.1 &are0a 2. %ec(ci!n de cons(tas preparadas. aB 5arefa 21a
Imos modi*icar a tá,oa da tare*a % para que o nome se-a un enlace que nos leve a un5a nova pá-ina que amosa in*ormación relativa aos ingredentes que ten a receita como se amo > sa a continuación:
Ao seleccionar un5a receita levaranos á seguinte pá-ina:
,#$ina 18 de -
bB 5arefa 21b
Empregando #'O amosa a seguinte in*ormación dos cocieiros:
Ao premer no enlace Editar dun cocieiro de,erase a,rir a pá-ina de edición do re-istro que amosará a in*ormación como se ve a continuación:
Todos os campos de,en ser edita,les salvo o código que identi*ica a cada cocieiro) Se-o e localidade de,en ser desplega,les que permiten ele-ir entre os posi,les valores) O ,otón Cancelar de,e devolver á 8ista-e de cocieiros Os ,otóns de Actuali;ar e Eliminar de momento están desactivados)
cB 5arefa 21c
Agora imos implementar o ,otón de Actuali;ar para que re*le-e na ,ase de datos as mo> di*icacións que teamos *eito nos campos: &sa parámetros con nome e un5a *unción para asociar os valores aos parámetros)
dB 5arefa 21d
Agora *ai o mesmo que na tare*a (c pero pasa non uses nomes para os parámetros e pása> os como un arra6) ,#$ina 1/ de -
Ademáis de,es engadir un5a mensa-e que indique o n.mero de re-istros a*ectados pola actuali;ación que se mostre segundos antes de recargar o re-istro actuali;ado da ,ase de datos) A(toavaiaci!n aB 5arefa 21a
O script que amosa a tá,oa ser9a similar ao da tare*a %) &nicamente cam,iar9a en que neste caso de,emos coller o código que será o que usemos no enlace a pá-ina que amosa os ingredientes de que consta a receita)
$db= new PDO('mysql:host='!$ser6idor!';dbname='!$base, $usuario, $contrasinal"; $sql = ')0 receita!codi5o, receita!nome, di3icultade, temo, nomeartistico ' ! 'A-O% receita inner Join che3 on cod*che3=che3!codi5o'; $stmt = $db7query($sql"; EM 8olcamos o resultado da consulta na 6ariable reistros: un array de arrays onde cada 3ila T unha 3ila de6olta ola consulta ME $3ilas = $stmt73etch+ll("; 3oreach ($3ilas as $3ila" ? echo #tr tda hre3=in3o-eceita!hNcod=#!$3ilaB'codi5o'C! # title='8er a receita comleta'# !$3ilaB'nome'C! #EaEtd td#!$3ilaB'di3icultade'C!#Etd td#!$3ilaB'temo'C!#Etd td#!$3ilaB'nomeartistico'C!#Etd Etr#; @ $db = null;
info-eceita(p:p html head .)-eceitasE.) linL rel=#stylesheet# hre3=#!!EublicEtare3as!css# E Ehead body Nh $ser6idor = #localhost#; $base = #receitas#; $usuario = #alumno#; $contrasinal = #abc12!#; $db= new PDO('mysql:host='!$ser6idor!';dbname='!$base, $usuario, $contrasinal"; EE e eiste o c9di5o da receita! i3 (isset($*B'cod'C"" ? $sql = ')0 cod*receita, cod*in5rediente, receita!nome as receita,' ! 'in5rediente!nome as in5rediente, cantidade, medida ' ! 'A-O% receita inner Join receita*in5rediente ' ! 'on receita!codi5o=cod*receita inner Join in5rediente ' ! 'on in5rediente!codi5o=cod*in5rediente ' ! '
#: #!$3ilaB'cantidade'C!# #!$3ilaB'medida'C!#E#; while($3ila = $stmt73etch("" ? echo # class='in5redientes'#!$3ilaB'in5rediente'C! #: #!$3ilaB'cantidade'C!# #!$3ilaB'medida'C!#E#; @ echo #Edi6#; @ N di6 id=#ainado# a hre3=#tare3a2!h#Ult;Ult; 8ol6erEaE Edi6 body Ehtml
bB 5arefa 21b ConectarPD(p:p Nh 3unction db0onnect ("? $ser6idor = #localhost#; $base = #receitas#; $usuario = #alumno#; $contrasinal = #abc12!#; try ? $db = new PDO('mysql:host='!$ser6idor!';dbname='!$base, $usuario, $contrasinal"; @ catch (PDOcetion $e" ? echo '/o conectado VVE'; echo $e75et%essa5e("; eit; @ return $db; @ N
tarefa2b(p:p html head .)0ociWeirosE.) linL rel=#stylesheet# hre3=#!!E!!EublicEtare3as!css# E Ehead body di6 id=#contido# h1).+> D 0O0.X.-OEh1 table tr th/O%Eth th+P).DOEth th/O%+-.0OEth thE Etr Nh require*once '0onectarPDO!h'; try? EEstablecemos a conei9n co ser6idor $db=db0onnect("; $sql = ')0 codi5o, nome, aelido1, aelido2, nomeartistico ' ! 'A-O% che3 O-D- G& aelido1, aelido2, nome'; $stmt = $db7query($sql"; EE8olcamos o resultado da consulta nun array de arrays EEonde cada 3ila T unha 3ila de6olta ola consulta $3ilas = $stmt73etch+ll("; 3oreach ($3ilas as $3ila" ? echo #tr td#!$3ilaB'nome'C!#Etd td#!$3ilaB'aelido1'C!# #!$3ilaB'aelido2'C!#Etd ,#$ina 21 de -
td#!$3ilaB'nomeartistico'C!#Etd tda hre3=editar0he3!hNcod=#!$3ilaB'codi5o'C! # title='ditar a in3ormaci9n do che3'# !'ditar'! #EaEtd Etr#;
@ $db = null; @catch(PDOcetion $e" ? rint $e75et%essa5e("; @ N Etable Edi6 Ebody Ehtml
editarC:ef(p:p html head .)ditar cociWeiroE.) linL rel=#stylesheet# hre3=#!!E!!EublicEtare3as!css# E Ehead body di6 id=#contido# h1D.+- 0O0.X.-OEh1 Nh require*once '0onectarPDO!h'; try? EEstablecemos a conei9n co ser6idor $db=db0onnect(";
i3 (isset($*B'cod'C"" ? $sql = ')0 M A-O% 0FA
3orm action=## method=#ost# table class=#edicion# trtdlabel 3or=#codi5o#0odi5o:ElabelEtd tdinut tye=#number# name=#codi5o# id=#codi5o#E disabled=#disabled# 6alue=#Nh echo $3ilaB'codi5o'C;N# brEEtdEtr trtdlabel 3or=#nome#/ome:ElabelEtd tdinut tye=#tet# name=#nome# id=#nome#E 6alue=#Nh echo $3ilaB'nome'C;N#brEEtdEtr trtdlabel 3or=#aelido1#+elidos:ElabelEtd tdinut tye=#tet# name=#aelido1# id=#aelido1#E 6alue=#Nh echo $3ilaB'aelido1'C;N# inut tye=#tet# name=#aelido2# id=#aelido2#E 6alue=#Nh echo $3ilaB'aelido2'C;N#brEEtdEtr trtdlabel 3or=#nome+rtistico#/ome artYstico:ElabelEtd tdinut tye=#tet# name=#nome+rtistico# id=#nome+rtistico#E 6alue=#Nh echo $3ilaB'nomeartistico'C;N#brEEtdEtr trtdlabel 3or=#seo#eo:ElabelEtd tdselect name=#seo# id=#seo#Nh echo $seo; NEselect EtdEtr trtdlabel 3or=#data#Data de nacemento:ElabelEtd tdinut tye=#date# name=#data# id=#data#E 6alue=#Nh echo $3ilaB'data*nacemento'C;N#brEEtdEtr trtdlabel 3or=#localidade#)ocalidade:ElabelEtd tdinut tye=#tet# name=#localidade# id=#localidade#E 6alue=#Nh echo $3ilaB'localidade'C;N#brEEtdEtr trtdlabel 3or=#ro6incia#Pro6incia:ElabelEtd tdselect name=#ro6incia# id=#ro6incia# Nh echo $ro6incia; NEselectEtdEtr trtd colsan=#2# button tye=#submit# name=#udate# disabled=#disabled# +ctualiZarEbutton button tye=#submit# name=#delete# disabled=#disabled# liminarEbutton button 3ormaction=#tare3a2b!h#0ancelarEbutton EtdEtr Etable E3orm Edi6 Ebody Ehtml
cB 5arefa 21c
Temos que modi*icar a pá-ina editarC5e*)p5p para implementar o ,otón: html head .)0ociWeirosE.) linL rel=#stylesheet# hre3=#!!E!!EublicEtare3as!css# E Ehead body di6 id=#contido# h1).+DO D 0O0.X.-OEh1 Nh require*once '0onectarPDO!h'; try? EEstablecemos a conei9n co ser6idor $db=db0onnect("; i3 (isset($*B'cod'C"" ? $sql = ')0 M A-O% 0FA
$seo !=#otion 6alue='F' selected='selected'FomeEotion otion 6alue='%'%ullerEotion#; @ else ? $seo !=#otion 6alue='F'FomeEotion otion 6alue='%' selected='selected'%ullerEotion#; @ $ro6incia=##; $sql2 = ')0 M A-O% P-O8./0.+'; $stmt2 = $db7query($sql2"; $3ilas = $stmt273etch+ll("; 3oreach ($3ilas as $3ila" ? $ro6incia!=#otion 6alue='#!$3ilaB'codi5o'C!#'#; i3 (strcm($3ilaB'codi5o'C,$3ilaB'cod*ro6incia'C"==S"? $ro6incia!=# selected='selected' #; @ $ro6incia!=##!$3ilaB'nome'C!#Eotion#; @
@
i3 (array*Ley*eists('udate', $*PO"" ? $sql = 'PD+ che3 nome = :nome, aelido1 = :ae1, '! 'aelido2 = :ae2, nomeartistico=:art, seo=:seo, '! 'data*nacemento=:data, localidade=:local, '! ' cod*ro6incia=:r6
tdinut tye=#date# name=#data# id=#data#E 6alue=#Nh echo $3ilaB'data*nacemento'C;N#brEEtdEtr trtdlabel 3or=#localidade#)ocalidade:ElabelEtd tdinut tye=#tet# name=#localidade# id=#localidade#E 6alue=#Nh echo $3ilaB'localidade'C;N#brEEtdEtr trtdlabel 3or=#ro6incia#Pro6incia:ElabelEtd tdselect name=#ro6incia# id=#ro6incia# Nh echo $ro6incia; NEselectEtdEtr trtd colsan=#2# button tye=#submit# name=#udate# +ctualiZarEbutton button tye=#submit# name=#delete# disabled=#disabled# liminarEbutton button 3ormaction=#tare3a2c!h#0ancelarEbuttonEtdEtr Etable E3orm Edi6 Ebody Ehtml
dB 5arefa 21d
Temos que modi*icar a parte da actuali;ación de editarC5e*)p5p para que quede como se ve a continuación: i3 (array*Ley*eists('udate', $*PO"" ? $sql = 'PD+ che3 nome = N, aelido1 = N, aelido2 = N, '! 'nomeartistico=N, seo=N, data*nacemento=N, '! ' localidade=N, cod*ro6incia=N '! '
1.2.2 &are0a 3. so de transacci!ns Agora tes que codi*icar o ,otón de Eliminar da tare*a anterior) #ara elo de,es ter en conta que para eliminar un cocieiro de,es eliminar todas as dependencias deste: Ten en conta que a ,ase de datos de,e quedar consistente co cal ou ,en se elimina toda a in*ormación do cocieiro ou non se *ará ningun5a modi*icación)
Solicita un5a con*irmación antes de proceder a *acer a operación) &n5a ve; eliminado o cocieiro da un5a mensa-e in*ormativa dos distintos elementos eliminados da ,ase de datos que de,e permanecer segundos en pantalla antes de devolvernos á lista-e de cocieiros)
A(toavaiaci!n
Temos que engadir a parte correspondiente á eliminación ao script editarC5e*)p5p:
,#$ina 25 de -
editarC:ef(p:p html head .)0ociWeirosE.) linL rel=#stylesheet# hre3=#!!EublicEtare3as!css# E Ehead body di6 id=#contido# h1).+> D 0O0.X.-OEh1 Nh require*once '0onectarPDO!h'; try? EEstablecemos a conei9n co ser6idor $db=db0onnect(";
i3 (isset($*B'cod'C"" ? $sql = ')0 M A-O% 0FA
$db7be5inransaction("; EE Gorramos os libros que teWa escritos este cociWeiro $sql = 'D) A-O% libro
EE Gorramos os restaurantes que teWa este cociWeiro $sql = 'D) A-O% restaurante
i3($bandeira" ? $db7commit("; EE e todo 3oi ben con3irma os cambios echo ' class=#mensae#liminado o cociWeiro con c9di5o '!$*B'cod'C!'E'; header(#re3resh: ;url=tare3a!h#"; eit; @ else ? $db7rollbacL("; EE e se non, re6Trteos echo ' class=#mensae#Produciuse un erro no borrado!!!E'; @ @ @catch(PDOcetion $e" ? ,#$ina 2 de -
rint $e75et%essa5e("; @ N 3orm action=## method=#ost# table class=#edicion# trtdlabel 3or=#codi5o#0odi5o:ElabelEtd tdinut tye=#number# name=#codi5o# id=#codi5o#E disabled=#disabled# 6alue=#Nh echo $3ilaB'codi5o'C;N# brEEtdEtr trtdlabel 3or=#nome#/ome:ElabelEtd tdinut tye=#tet# name=#nome# id=#nome#E 6alue=#Nh echo $3ilaB'nome'C;N#brEEtdEtr trtdlabel 3or=#aelido1#+elidos:ElabelEtd tdinut tye=#tet# name=#aelido1# id=#aelido1#E 6alue=#Nh echo $3ilaB'aelido1'C;N# inut tye=#tet# name=#aelido2# id=#aelido2#E 6alue=#Nh echo $3ilaB'aelido2'C;N#brEEtdEtr trtdlabel 3or=#nome+rtistico#/ome artYstico:ElabelEtd tdinut tye=#tet# name=#nome+rtistico# id=#nome+rtistico#E 6alue=#Nh echo $3ilaB'nomeartistico'C;N#brEEtdEtr trtdlabel 3or=#seo#eo:ElabelEtd tdselect name=#seo# id=#seo# Nh echo $seo; N EselectEtdEtr trtdlabel 3or=#data#/ome:ElabelEtd tdinut tye=#date# name=#data# id=#data#E 6alue=#Nh echo $3ilaB'data*nacemento'C;N#brE EtdEtr trtdlabel 3or=#localidade#)ocalidade:ElabelEtd tdinut tye=#tet# name=#localidade# id=#localidade#E 6alue=#Nh echo $3ilaB'localidade'C;N#brEEtdEtr trtdlabel 3or=#ro6incia#Pro6incia:ElabelEtd tdselect name=#ro6incia# id=#ro6incia# Nh echo $ro6incia; N EselectEtdEtr trtd colsan=#2# button tye=#submit# name=#udate# +ctualiZarEbutton button tye=#submit# name=#delete# onclicL=#return con3irm('stQ se5uro que desea eliminar este cociWeiroN'"#liminar Ebutton button 3ormaction=#tare3a!h#0ancelarEbuttonEtdEtr Etable E3orm Edi6 Ebody Ehtml
,#$ina 28 de -
1.3
&e%tos de apoio o( de re0erencia
1.#
http://www.php.net/, documentación so,re
a lingua-e #/#) http://www.w3schools.com/php/default.asp, documentación so,re a lingua-e #/#
)ec(rsos did+cticos
Apuntes do pro*esor Ordenador persoal con: o So*tGare de servidor Ge, Apac5e ou semellante) o Int4rprete da lingua-e #/#) o Contorno de desenvolvemento de aplicacións Ge, Net=eans ou semellante) o Navegador Ge, Fire*o- ou semellante)
,#$ina 2/ de -
3. Avaiaci!n 7riterios de avaliación seleccionados para esta actividade
Instrumento de avaliación
C&(2(2 = Creáronse aplicacións ue estable,an cone$ións con bases de datos empre#ando PD
P*(3 = -elativa a reali,ación da cone$ión empre#ando PD nas tarefas propostas ao alumnado e a proba práctica reali,ada ao rematar a actividade
C&(3(2 = -ecuperouse información almacenada en bases de datos empre#ando PD
P*(4 = -elativa a reali,ación de consultas empre#ando PD nas tarefas propostas ao alumnado e a proba práctica reali,ada ao rematar a actividade(
C&(< = Publicouse en aplicacións web a información recuperada
P*( = -elativa á publicación da información recuperada nas tarefas propostas ao alumnado e a proba práctica reali,ada ao rematar a actividade
C&(4 = "tili,áronse con$untos de datos para almacenar a información
P*(7 = -elativa á utlili,ació nde con$untos de datos nas tarefas propostas ao alumnado e a proba práctica reali,ada ao rematar a actividade
C&((2 = Creáronse aplicacións web ue permitan a actuali,ación e a eliminación de información dispo;ible nun:a base de datos empre#ando PD
P*(> = -elativa á reali,ación de consultas de acción empre#ando PD nas tarefas propostas ao alumnado e a proba práctica reali,ada ao rematar a actividade
C&(7(2 = "tili,áronse transaccións para manter a consistencia da información empre#ando PD
P*(!! = -elativa á utili,ación de transaccións empre#ando PD nas tarefas propostas ao alumnado e a proba práctica reali,ada ao rematar a actividade
C&(8 = Probáronse e documentáronse as aplicacións
P*(!2 = -elativa á documentación das tarefas propostas ao alumnado e da proba práctica reali,ada ao rematar a actividade
C&(> = Identificouse a necesidade do uso de consultas preparadas
P*(!3 = -elativa á utili,ación de consultas preparadas nas tarefas propostas ao alumnado e a proba práctica reali,ada ao rematar a actividade
%empo de e%erci*o a reai*ar na proba pr+ctica a reai*ar ao rematar a .D.
So,re a ,ase de datos receitas reali;a os seguintes scripts en p5p: A cone-ión á ,ase de datos *araa nun script de nome conectar#'O)
&n script que amose un listado de li,ros segundo se ve na ima-e:
,#$ina 3" de -
o A in*ormación aparecerá pa-inada 1no e-emplo H re-istros por pá-ina3 o Inicialmente amosará toda a in*ormación en orde ascendente por t9tulo pero permitirá: – Filtrar os li,ros amosando unicamente os que conteen o te-to escrito no cadro T9tulo) – Ordenar a in*ormación por t9tulo editorial ou c5e* de -eito ascendente ou descendente)
Cando se prema en Editar amosarase un5a *ic5a do li,ro segundo se amosa a continuación:
A(toavaiaci!n ConectarPD(p:p Nh 3unction db0onnect ("? $ser6idor = #localhost#; $base = #receitas#; $usuario = #alumno#; $contrasinal = #abc12!#; try ? $db = new PDO('mysql:host='!$ser6idor!';dbname='!$base, $usuario, $contrasinal"; @ catch (PDOcetion $e" ? echo '/o conectado VVE'; echo $e75et%essa5e("; ,#$ina 31 de -
eit; @ return $db;
@ N
info)ibros(p:p html head .))ibrosE.) linL rel=#stylesheet# hre3=#!!EublicEtare3as!css# E Ehead body di6 id=#contido# h1).+> D ).G-OEh1 di6 id=#3iltro# 3ieldset le5endAiltrar orEle5end 3orm action=## method=#ost# label 3or=#titulo#Ytulo:Elabel inut tye=#tet# name=#titulo# id=#titulo#E label 3or=#orde#Ordenar or:Elabel select name=#orde# id=#orde# otion 6alue='titulo' YtuloEotion otion 6alue='editorial'ditorialEotion otion 6alue='che3'0he3Eotion Eselect inut tye=#radio# name=#senso# 6alue=#+0# checLed=#checLed#+0Einut inut tye=#radio# name=#senso# 6alue=#D0#D0Einut button tye=#submit# name=#3iltrar#AiltrarEbutton E3orm E3ieldset
brE Edi6 table tr th.)OEth thD.O-.+)Eth th0FAEth thE Etr Nh require*once '0onectarPDO!h'; try? $num-eistros = [; EE-eistros or Qina $aina = 1; EEor de3ecto a aina serQ a rimeira EErimero obtemos o arQmetro que nos dY en quT Qina estamos i3(array*Ley*eists('a', $*""? $aina = $*B'a'C; @ EEstablecemos a conei9n co ser6idor $db=db0onnect("; $stmt = $db7query(#)0 M A-O% libro#"; $total-eistros = $stmt7row0ount("; EEcalculamos o n\mero de Qinas $totalPainas = ceil($total-eistrosE$num-eistros";
$sql = #)0 libro!codi5o, titulo, editorial, 0O/0+(nome,' ',aelido1,' ',.A/))(aelido2,''"" as che3 A-O% che3 inner Join libro on cod*che3=che3!codi5o #; i3 (array*Ley*eists(#3iltrar#,$*PO"" ? $sql!=#
@ else $sql!=# O-D- G& titulo#; EE obtenemos o se5mento ainado que corresonde a esta Qina $sql!=# ).%. #!(($aina71"M$num-eistros"!#, $num-eistros #;
$stmt = $db7reare($sql"; $stmt7bindParam(1,$titulo, PDO::P+-+%*-"; $stmt7eecute("; EE8olcamos o resultado da consulta na 6ariable reistros un array de EE arrays onde cada 3ila T unha 3ila de6olta ola consulta $3ilas = $stmt73etch+ll("; 3oreach ($3ilas as $3ila" ? echo #tr td#!$3ilaB'titulo'C!#Etd td#!$3ilaB'editorial'C!#Etd td#!$3ilaB'che3'C!#Etd tda hre3=editar)ibro!hNcod=#!$3ilaB'codi5o'C! # title='ditar a in3ormaci9n do libro'# !'ditar'! #EaEtd Etr#; @ $db = null; echo 'EtablebrEbrEdi6 id=#ainado#'; EEenlaces ara o ainado 3or($i=S; $i$totalPainas;$i^^"? echo 'a hre3=#a6al!hNa='!($i^1"!'#'!($i^1"!'Ea _ ';
@ echo 'Edi6'; @catch(PDOcetion $e" ? rint $e75et%essa5e("; @ N Edi6 EbodyEhtml
editar)ibro(p:p html head .)ditar libroE.) linL rel=#stylesheet# hre3=#!!EublicEtare3as!css# E Ehead body di6 id=#contido# h1D.+- ).G-OEh1 Nh require*once '0onectarPDO!h'; try? EEstablecemos a conei9n co ser6idor $db=db0onnect(";
i3 (isset($*B'cod'C"" ? $sql = ')0 M A-O% ).G-O
3oreach ($3ilasc as $3ilac" ? $che3!=#otion 6alue='#!$3ilacB'codi5o'C!#'#; i3 (strcm($3ilacB'codi5o'C,$3ilaB'cod*che3'C"==S"? $che3!=# selected='selected' #; @ $che3!=##!$3ilacB'che3'C!#Eotion#; @ @
i3 (array*Ley*eists('udate', $*PO"" ? $sql = 'PD+ libro titulo = N, editorial = N, '! 'ainas=N, cod*che3=N
@ else ? $count = $stmt7row0ount("; rint(# class='mensae'GorrQronse $count libros!E#"; @ @ @catch(PDOcetion $e" ? rint $e75et%essa5e("; @
N 3orm action=## method=#ost# table class=#edicion# trtdlabel 3or=#codi5o#0odi5o:ElabelEtd tdinut tye=#number# name=#codi5o# id=#codi5o#E disabled=#disabled# 6alue=#Nh echo $3ilaB'codi5o'C;N#brE EtdEtr trtdlabel 3or=#titulo#Ytulo:ElabelEtd tdinut tye=#tet# name=#titulo# id=#titulo#E 6alue=#Nh echo $3ilaB'titulo'C;N#brE EtdEtr trtdlabel 3or=#editorial#ditorial:ElabelEtd tdinut tye=#tet# name=#editorial# id=#editorial#E 6alue=#Nh echo $3ilaB'editorial'C;N#brE EtdEtr trtdlabel 3or=#ainas#PQinas:ElabelEtd tdinut tye=#tet# name=#ainas# id=#ainas#E 6alue=#Nh echo $3ilaB'ainas'C;N#brE EtdEtr trtdlabel 3or=#che3#0he3:ElabelEtd tdselect name=#che3# id=#che3#Nh echo $che3; NEselect EtdEtr trtd colsan=#2# button tye=#submit# name=#udate# +ctualiZarEbutton button tye=#submit# name=#delete# onclicL=#return con3irm('stQ se5uro que desea eliminar este libroN'"# liminarEbutton button 3ormaction=#a6al!h#0ancelarEbuttonEtdEtr Etable ,#$ina 3# de -