Diferència entre revisions de la pàgina «PHP MySQL select»
Línia 152: | Línia 152: | ||
#'''join1.php''': mostra les assignatures que imparteix el professor Enric Mieza. | #'''join1.php''': mostra les assignatures que imparteix el professor Enric Mieza. | ||
#:Resultat: hauria de sortir-vos només l'assignatura de Muntatge i la de Bases de Dades. | #:Resultat: hauria de sortir-vos només l'assignatura de Muntatge i la de Bases de Dades. | ||
− | #'''join2.php''': llistat de les UFs de l'assignatura "Sistemes | + | #'''join2.php''': llistat de les UFs de l'assignatura "Sistemes Operatius Monolloc". |
#'''join3.php''': llistat d'assignatures amb la seva titulació. | #'''join3.php''': llistat d'assignatures amb la seva titulació. | ||
#'''join4.php''': nombre de matrícules del curs 2009-2010 | #'''join4.php''': nombre de matrícules del curs 2009-2010 |
Revisió del 15:38, 21 abr 2010
Utilitzarem les funcions PHP per accedir al SGBD MySQL. Consulteu-les aquí.
A grans trets, el proceś general per atacar un SGBD és aquest:
- Connexió a la BBDD
- Crear i enviar query
- Obtenir resultats i mostrar-los per pantalla
En aquest darrer pas (obtenir i mostrar resultats) cal fixar-se especialment en l' estructura de control que necessitarem:
- Bucle de registres: (while) iterarà per cadascuna de les files de la taula. Haurà de ser un bucle tipus while ja que no sabem quan arribarem a la darrera fila.
Contingut
Procés detallat per extreure dades de MySQL
Per obtenir dades d'una taula MySQL i visualitzar-la utilitzant PHP seguirem les següents passes:
- Connexió
- Connectar a MySQL amb l'ordre mysql_connect()
- Triar la BBDD de treball amb mysql_select_db()
- Crear i enviar consulta (query):
- Crear la consulta i desar-la en una variable, típicament $query = "SELECT ... FROM ... WHERE ..."
- Enviar la consulta al sistema (SGBD) per obtenir el resultat amb mysql_query()
- Si no hi ha resultat (0 files o bé hi ha algun error a la sintaxi) posem un missatge d'error i acabem l'execució de la pàgina web amb die($missatge)
- Obtenir resultats i mostrar-los:
- Obrim taula HTML amb <table> i la capçalera amb <thead>
- Bucle while pels registres de la taula: com que poden haver-ne varis, farem un bucle (loop). Típicament s'utiltiza un while perquè no sabem quan arribarem a la darrera fila
- (Dins del while) Extreure les dades d'un registre (fila de la BBDD) i emmagatzemar-les en un array amb alguna d'aquestes funcions:
- mysql_fetch_row(): extreu els camps de la fila en un array numèric clàssic.
- Per exemple: echo $registre[0]
- mysql_fetch_assoc(): extreu els camps de la fila en un array associatiu.
- Per exemple: echo $registre["titol_original"]
- mysql_fetch_object(): extreu els camps en un objecte.
- Per exemple: echo $registre->titol_original;
- Obrim la fila de la taula HTML amb <tr>
- Mostrem dades dins de cel·les d'una taula HTML. Haurem de concatenar diverses cadenes de caràcters:
- Obrir la cel·la de la taula utiltizant <td>
- Imprimir resultat amb les dades de l'array. Per exemple, $registre["titol_original"]
- Tancar la cel·la de la taula utiltizant </td>
- Tanquem la fila de la taula HTML amb </tr>
- Tanquem la taula amb </table>
Codi font de l'exemple
Utilitzarem l'exemple de la base de dades del videoclub Fitxer:Videoclub.sql.
Per crear i importar la base de dades d'exemple pots consultar SQL creacio.
<html> <head> <title>Exemple de lectura de dades a MySQL</title> <style> body{ } table,td { border: 1px solid black; border-spacing: 0px; } </style> </head> <body> <h1>Exemple de lectura de dades a MySQL</h1> <?php # (1.1) Connectem a MySQL (host,usuari,contrassenya) mysql_connect('localhost','enric','enric'); # (1.2) Triem la base de dades amb la que treballarem mysql_select_db('enric_video'); # (2.1) creem el string de la consulta (query) $consulta = "SELECT * FROM films;"; # (2.2) enviem la query al SGBD per obtenir el resultat $resultat = mysql_query($consulta); # (2.3) si no hi ha resultat (0 files o bé hi ha algun error a la sintaxi) # posem un missatge d'error i acabem (die) l'execució de la pàgina web if (!$resultat) { $message = 'Consulta invàlida: ' . mysql_error() . "\n"; $message .= 'Consulta realitzada: ' . $consulta; die($message); } ?> <!-- (3.1) aquí va la taula HTML que omplirem amb dades de la BBDD --> <table> <!-- la capçalera de la taula l'hem de fer nosaltres --> <thead><td colspan="5" align="center" bgcolor="cyan">Llistat de films disponibles</td></thead> <?php # (3.2) Bucle while while( $registre = mysql_fetch_assoc($resultat) ) { # els \t (tabulador) i els \n (salt de línia) son perquè el codi font quedi llegible
# (3.3) obrim fila de la taula HTML amb echo "\t\n"; # (3.4) cadascuna de les columnes ha d'anar precedida d'un
# després concatenar el contingut del camp del registre
# i tancar amb un echo "\t\t".$registre["titol_original"]."\n"; echo "\t\t".$registre['titol_traduit']."\n"; echo "\t\t".$registre["director"]."\n"; echo "\t\t".$registre['productora']."\n";
# (3.5) tanquem la fila
echo "\t\n"; } ?> <!-- (3.6) tanquem la taula -->
</body> </html>
Exercicis
Posa en marxa aquest exemple en la teva màquina Linux. Hauràs de:
- Instal·lar apache2 i php5
- Comproveu que el servidor Apache funciona apuntant el browser a http://localhost
- Rearrencar apache amb
- $> sudo apache2ctl restart
- Importar la base de dades Fitxer:Videoclub.sql al vostre servidor MySQL. Si no sabeu com fer-ho, consulteu-ho a SQL_creacio
- Si no us deixa haureu de donar permisos a la carpeta per poder escriure amb
- $> sudo chmod 777 /var/www
- Copiar i enganxar el codi PHP de l'exemple de més amunt a l'arxiu /var/www/ex1.php
Realitza els següents exercicis amb la Fitxer:Ufs.sql base de dades de UFs. Si no saps com crear-la pots consultar-ho a SQL_creacio.
- ex2.php: mostra les assignatures de 2n de SMX. Cal, doncs, tenir instal·lada la base de dades.
- ex3.php: mostra les assignatures de la ESO.
- ex4.php: mostra el nom dels tots els alumnes.
Exercicis amb el videoclub:
- ex5.php: mostra tots els lloguers ordenats descendentment per data de sortida.
- ex6.php: mostra els diferents gèneres disponibles ordenats alfabèticament.
Exercicis amb JOIN
IMPORTANT:
- Tituleu adeqüadament cada pàgina perquè quedi clar quina consulta estem realitzant.
- No val utilitzar IDs al WHERE (per això justament son amb JOIN). Heu de fer servir la paraula o dada tal i com apareix a l'enunciat de cada exercici.
- A totes les consultes ha d'aparèixer, com a mínim, totes les dades que apareixen a l'enunciat.
- Per exemple, si demanem totes els alumnes matriculats a la ESO ha d'aparèixer no només al nom dels alumnes, sinó també la titulació (ESO).
- Poseu encapçalament a les columnes.
- MOLT IMPORTANT: tingueu en compte que quan es fa un select amb join, poden haver camps de diverses taules amb el mateix nom de columna. A l'utiltizar arrays associatius, la clau de l'array amb la que ens adreçem pot estar superposada i llavors només visualitzarem les dades del darrer camp que apareix en els SELECT. Per solucionar-ho, utilitzeu el AS per reanomenar la columna amb un altre nom que us convingui.
- Per exemple, al exercici "join1.php", si fem un "SELECT assignatures.*, professors.* FROM ..." tindrem un conflicte entre les columnes "nom" del professor i el "nom" de l'assignatura. Per poder accedir a les dues dades, cal que les expliciteu totes dues (no valen, doncs, els *) i reanomenar-les a nom_profe i nom_assignautra amb un "AS".
Exercicis:
- join1.php: mostra les assignatures que imparteix el professor Enric Mieza.
- Resultat: hauria de sortir-vos només l'assignatura de Muntatge i la de Bases de Dades.
- join2.php: llistat de les UFs de l'assignatura "Sistemes Operatius Monolloc".
- join3.php: llistat d'assignatures amb la seva titulació.
- join4.php: nombre de matrícules del curs 2009-2010
- join5.php: recompte de matrícules per curs.
- join6.php: recompte de UFs per assignatura.
- join7.php: llistat de les UFs de les assignatures de SMX, ordenades per número del mòdul (assignatura).
- join8.php: llistat de les assignatures en què està matriculat en Pere Escribano.
- join9.php: llistat de qualificacions (assigntura i UF) de l'alumne Òscar Tabuada.
- join10.php: llistat de qualificacions aprovades dels alumnes del curs 2009-2010.
- join11.php: mitjana de les qualificacions de l'alumne David Dalmau.
- join12.php: llistat d'alumnes aprovats de les UFs de l'assignatura "Sistemes Operatius Monolloc".