Diferència entre revisions de la pàgina «PHP MySQL select»

De Cacauet Wiki
Salta a la navegació Salta a la cerca
Línia 117: Línia 117:
  
 
== Exercicis ==
 
== Exercicis ==
#Posa en marxa aquest exemple en la teva màquina. Hauràs de:
+
Posa en marxa aquest exemple en la teva màquina Linux. Hauràs de:
#*Instal·lar apache2 i php5
+
*Instal·lar apache2 i php5
#*Rearrencar apache amb '''> sudo apache2ctl restart'''
+
*Comproveu que el servidor Apache funciona apuntant el ''browser'' a http://localhost
#*Importar la base de dades [[Fitxer:Videoclub.sql]] al vostre servidor MySQL. Si no sabeu com fer-ho, consulteu-ho a [[SQL_creacio]]
+
*Rearrencar apache amb
#*Copiar i enganxar el codi esmentat abans a /var/www. Si no us deixa haureu de donar permisos a la carpeta per poder escriure amb '''> sudo chmo 777 /var/www'''
+
*:    '''$> sudo apache2ctl restart'''
#Crea un nou arxiu anomenat ex2.php i configura'l perquè mostri les assignatures de 2n de SMX. Cal, doncs, tenir instal·lada la base de dades [[Fitxer:Ufs.sql]].
+
*Importar la base de dades [[Fitxer:Videoclub.sql]] al vostre servidor MySQL. Si no sabeu com fer-ho, consulteu-ho a [[SQL_creacio]]
#ex3.php: mostra les assignatures de la ESO.
+
*Si no us deixa haureu de donar permisos a la carpeta per poder escriure amb
#ex4.php: mostra el nom dels tots els alumnes.
+
*:    '''$> sudo chmod 777 /var/www'''
#:OJU: a partir d'aquí van amb JOIN (IMPORTANT: no val utilitzar IDs al WHERE).
+
*Copiar i enganxar el codi PHP de l'exemple de més amunt a l'arxiu /var/www/ex1.php
#ex5.php: mostra les assignatures que imparteix el professor Enric Mieza.
+
 
 +
 
 +
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.
 
#:Resultat: hauria de sortir-vos només l'assignatura de Muntatge i la de Bases de Dades.
#ex6.php: llistat de les UFs de l'assignatura "Seguretat informàtica".
+
#'''join2.php''': llistat de les UFs de l'assignatura "Seguretat informàtica".
#ex7.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
 +
#'''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".

Revisió del 12:17, 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:

  1. Connexió a la BBDD
  2. Crear i enviar query
  3. 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.


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:

  1. Connexió
    1. Connectar a MySQL amb l'ordre mysql_connect()
    2. Triar la BBDD de treball amb mysql_select_db()
  2. Crear i enviar consulta (query):
    1. Crear la consulta i desar-la en una variable, típicament $query = "SELECT ... FROM ... WHERE ..."
    2. Enviar la consulta al sistema (SGBD) per obtenir el resultat amb mysql_query()
    3. 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)
  3. Obtenir resultats i mostrar-los:
    1. Obrim taula HTML amb <table> i la capçalera amb <thead>
    2. 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;
    3. Obrim la fila de la taula HTML amb <tr>
    4. 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>
    5. Tanquem la fila de la taula HTML amb </tr>
    6. 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:

  1. 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.
  2. join2.php: llistat de les UFs de l'assignatura "Seguretat informàtica".
  3. join3.php: llistat d'assignatures amb la seva titulació.
  4. join4.php: nombre de matrícules del curs 2009-2010
  5. join5.php: recompte de matrícules per curs.
  6. join6.php: recompte de UFs per assignatura.
  7. join7.php: llistat de les UFs de les assignatures de SMX, ordenades per número del mòdul (assignatura).
  8. join8.php: llistat de les assignatures en què està matriculat en Pere Escribano.
  9. join9.php: llistat de qualificacions (assigntura i UF) de l'alumne Òscar Tabuada.
  10. join10.php: llistat de qualificacions aprovades dels alumnes del curs 2009-2010.
  11. join11.php: mitjana de les qualificacions de l'alumne David Dalmau.
  12. join12.php: llistat d'alumnes aprovats de les UFs de l'assignatura "Sistemes Operatius Monolloc".