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

De Cacauet Wiki
Salta a la navegació Salta a la cerca
Línia 122: Línia 122:
 
#*Importar la base de dades [[Fitxer:Videoclub.sql]] al vostre servidor MySQL. Si no sabeu com fer-ho, consulteu-ho a [[SQL_creacio]]
 
#*Importar la base de dades [[Fitxer:Videoclub.sql]] al vostre servidor MySQL. Si no sabeu com fer-ho, consulteu-ho a [[SQL_creacio]]
 
#*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'''
 
#*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'''
#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]].
+
#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]].
#... en marxa ...
+
#ex3.php: mostra les assignatures de la ESO.
 +
#ex4.php: mostra el nom dels tots els alumnes.
 +
#ex5.php:

Revisió del 14:48, 20 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

  1. Posa en marxa aquest exemple en la teva màquina. Hauràs de:
    • Instal·lar apache2 i php5
    • 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
    • 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
  2. 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.
  3. ex3.php: mostra les assignatures de la ESO.
  4. ex4.php: mostra el nom dels tots els alumnes.
  5. ex5.php: