![]() |
|
||||||||||||||||
![]() |
||||||||||||||||
Pràctica |
![]() |
Exercicis
|
||||||||||||||
Tractament de dades | ||||||||||||||||
![]() |
L'objectiu d'aquesta pràctica consisteix a donar a conèixer alguns dels avantatges que aporta l'ADODB en el tractament i l'anàlisi de les dades que manipula el programari. En aquesta pràctica només es defineixen algunes d'aquestes particularitats, però seria convenient revisar la documentació de l'ADODB per treure'n el màxim profit. |
|
Treballar amb les dades | |
Obtenir característiques dels camps de la base de dades | |
És interessant, de vegades, conèixer el tipus de dada que retorna la consulta que s'ha fet, ja que segons el tipus, s'han de formatar les dades per presentar-les en pantalla. | |
FetchField($columna). Es tracta d'un mètode de la classe RecorSet que retorna un objecte que conté tres propietats fonamentals de la columna sol·licitada (nom, tipus de dada i longitud del camp). | |
![]() |
|
Figura 5.3.1. Propietats de l'ADODBFieldObject
|
|
Metatype($Objecte_Camp). Codifica segons una taula predeterminada els diferents tipus de dades que conté un camp. S'utilitza per preparar formats de presentació de dades segons el tipus de dada de què es disposa. | |
![]() |
Es presenta un programa que analitza una taula definible pel paràmete $Taula, de la base de dades tutoria, d'on extraureu les dades corresponents a les característiques dels camps que componen cada registre, a més de visualitzar les dades contingudes en el primer registre. |
Assegureu-vos que la taula que analitzeu tingui almenys un registre. | |
<?php include("../adodb/adodb.inc.php"); // Establim paràmetres regionals en català dies,hora,moneda,numèrics $Taula= "entrevista"; if (!$resultat->EOF){ // Tantes vegades com camps hi ha en un registre. $Camp=$resultat->FetchField($i); if ($Tipus=='D' && $Camp->max_length>7) { print '<h4> Valor del camp : '.$resultat->fields[$i]. '</h4><BR> <BR>'; $resultat->Close(); |
|
Llistat 5.3.1. Codi del fitxer m5p31.php | |
Fixeu-vos que en aquest fitxer (m5p31.php) només llegiu un registre de la BD; per veure'n l'estructura mai llegiu el segon registre, no hi ha cap MoveNext(). El que sí que es fa al bucle for és desplaçar-se pels camps que componen un registre, per descobrir-ne l'estructura i les dades que contenen. | |
Afegir dades a les taules | |
![]() |
Ara inserireu un nou professor a la base de dades tutoria. Utilitzareu el mètode GetInsertSQL de la llibreria ADODB, que a partir de l'objecte RecorSet que teniu i d'un array de valors, és capaç de crear la sentència SQL adequada. |
En un primer moment, potser no trobareu la necessitat d'utilitzar un mètode que creï la sentència SQL. Però, i si us diem que no totes les BD compleixen els estàndards SQL? Ara ja té més importància, oi? | |
<?php <!doctype html public "-//W3C//DTD HTML 4.0 //EN"> // iden=-1, ens posiciona en el primer registre buit. $reg=array(); // Incialitzem Array // Entrem les dades del professor // ADODB ens crea amb aquesta funció las sentència SQL // Visualitzem SQL creada per ADODB $ConTut->Execute ($SQL_insert); // Executem sentència insercció. ?> $resultat->Close(); # Alliberem l'array dels resultats |
|
Figura 5.3.2. Codi del fitxer m5p32.php | |
I per modificar dades? | |
![]() |
Ara s'ha de modificar el nom i el sexe del professor que heu entrat; igual que abans, us valdreu d'un mètode, la classe connexió de l'ADODB, que crea la sentència SQL per fer aquesta modificació, GetUpdateSQL($recordSet, $array_valors). |
<?php <!doctype html public "-//W3C//DTD HTML 4.0 //EN"> <?php // Seleccionem el professor amb codi = TGUASH // Modifiquem Nom i Sexe // ADODB ens crea amb aquesta funció las sentència SQL print 'sentència SQL creada per ADODB :<BR>'.$SQL_update.'<BR>'; ?> $resultat->Close(); |
|
Figura 5.3.3. Codi del fitxer m5p33.php | |
Aspectes que s'han de tenir en compte | |
En casos extrems, us podeu trobar que el servidor de base de dades sigui més lent que el servidor web; aquest fet pot sobrecarregar molt el sistema si hi ha moltes sessions obertes. Aleshores, utilitzareu la sentència CacheExecute, en comptes d'Execute, ja que, a diferència de l'anterior, manté les dades un temps determinat sobre un directori del servidor, i si el client intenta fer la mateixa consulta, no se sol·licita a la base de dades, sinó que es descarrega del fitxer guardat, sempre que no se superi el temps establert de memòria cau (cache), que el definim a cacheSecs. | |
<?php /*----------------------------------------------------------------- * Mòdul: 5 Pràctica: 3 Fitxer: m5p34.php * Autor: D116 Data: * Descripció: Exemple de memòria cahé de resultat de la BD * Pre condi.: ADODB,BD tutoria, fitxer de connexió tutoria_con.php * Post cond.: -----------------------------------------------------------------*/ ?> <!doctype html public "-//W3C//DTD HTML 4.0 //EN"> <?php $ADODB_CACHE_DIR ='./'; // Directori per guardar dades cache $sql="select codi,nom,cognom1,email, anybaixa from professor"; if (!$recordSet->EOF){ $recordSet->Close(); |
|
Figura 5.3.4 Codi del fitxer m5p34.php | |
![]() |
Només utilitzeu CacheExecute amb setències SQL del tipus SELECT, mai sobre una inserció o modificació de dades. En sistemes ràpids, la utilització d'aquest metòde pot provocar un alentiment del sistema. |
De vegades, es dóna el cas que s'han d'inserir massivament dades sobre una taula, i el mètode d'inserció d'una a una pot provocar un alentiment i/o blocatge temporal de la base de dades. | |
![]() |
Internament, no totes les bases de dades poden suportar aquesta particularitat. Si és així, la funció fa una emulació, que no es diferencia en temps del mètode habitual. El MySQL no ho suporta, però sí l'Oracle, l'Interbase i alguns ODBC. Consulteu la informació a la documentació referent al mètode Prepare($sql). |
![]() |
Observeu que les dades que obteniu com a resposta del servidor, en aquest últim exemple, no les assigneu a la variable $resultat, sinó a un altra variable, que s'ha anomenat $recordSet. Aquest nom l'hem possat nosaltres i podria ser qualsevol, però arribats aquí, hem cregut convenient modificar-lo. La paraula recordSet significa "conjunt de registres", que no és més que el resultat que dóna Execute o CacheExecute. I en principi apunta al primer registre que compleix la sentència SQL sol·licitada, tot i que l'objecte $recordSet conté tots els registres que compleixen l'SQL introduïda. |
![]() |
També heu pogut observar que s'ha utilitzat una funció de lADODB anomenada rs2html, que si llegiu literalment diu: "recordset to html". Amb aquesta sola instrucció podeu simplificar el codi, per la visualització de dades en pantalla. A la pròxima pràctica se'n parlarà amb més detall. |
![]() |
![]() |
||||||||||
|
Exercicis |
|||||||||