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

De Cacauet Wiki
Salta a la navegació Salta a la cerca
(Es crea la pàgina amb «Utilitzarem les [http://es2.php.net/manual/en/book.mysql.php funcions PHP] per accedir al SGBD MySQL. Consulteu-les [http://es2.php.net/manual/en/book.mysql.php aquí]. …».)
 
Línia 18: Línia 18:
 
##'''Connectar''' a MySQL amb l'ordre '''''mysql_connect()'''''
 
##'''Connectar''' a MySQL amb l'ordre '''''mysql_connect()'''''
 
##'''Triar la BBDD''' de treball amb '''''mysql_select_db()'''''
 
##'''Triar la BBDD''' de treball amb '''''mysql_select_db()'''''
#Crear i enviar consulta:
+
#Crear i enviar consulta (query):
 
##'''Crear la consulta''' i desar-la en una variable, típicament '''''$query = "SELECT ... FROM ... WHERE ..."'''''
 
##'''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 '''''[http://es2.php.net/manual/es/function.mysql-query.php mysql_query()]'''''
 
##'''Enviar la consulta''' al sistema (SGBD) per obtenir el resultat amb '''''[http://es2.php.net/manual/es/function.mysql-query.php mysql_query()]'''''
Línia 25: Línia 25:
 
##Obrim taula HTML amb <nowiki><table></nowiki> i la capçalera amb <nowiki><thead></nowiki>
 
##Obrim taula HTML amb <nowiki><table></nowiki> i la capçalera amb <nowiki><thead></nowiki>
 
##'''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
 
##'''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:
+
##:(Dins del while) Extreure les dades d'un registre (fila de la BBDD) i emmagatzemar-les en un ''array'' amb alguna d'aquestes funcions:
##**''[http://es2.php.net/manual/es/function.mysql-fetch-row.php mysql_fetch_row()]'': extreu els camps de la fila en un array numèric clàssic. A l'exemple utilitzarem aquest.
+
##*''[http://es2.php.net/manual/es/function.mysql-fetch-row.php mysql_fetch_row()]'': extreu els camps de la fila en un array numèric clàssic.
##**''[http://es2.php.net/manual/es/function.mysql-fetch-assoc.php mysql_fetch_assoc()]'': extreu els camps de la fila en un array associatiu.
+
##*:Per exemple: echo $registre[0]
##**''[http://es2.php.net/manual/es/function.mysql-fetch-object.php mysql_fetch_object()]'': extreu els camps en un objecte.
+
##*''[http://es2.php.net/manual/es/function.mysql-fetch-assoc.php mysql_fetch_assoc()]'': extreu els camps de la fila en un array associatiu.
##*Obrim la fila de la taula HTML amb <nowiki><tr></nowiki>
+
##*:Per exemple: echo $registre["titol_original"]
##*'''Bucle for''': recorrerem les dades per mostrar el resultat amb un echo amb les cel·les de la taula utiltizant <nowiki><td></nowiki>
+
##*''[http://es2.php.net/manual/es/function.mysql-fetch-object.php mysql_fetch_object()]'': extreu els camps en un objecte.
##*Tanquem la fila de la taula HTML amb <nowiki></tr></nowiki>
+
##*:Per exemple: echo $registre->titol_original;
 +
##Obrim la fila de la taula HTML amb <nowiki><tr></nowiki>
 +
##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 <nowiki><td></nowiki>
 +
##*Imprimir resultat amb les dades de l'array. Per exemple, $registre["titol_original"]
 +
##*Tancar la cel·la de la taula utiltizant <nowiki></td></nowiki>
 +
##Tanquem la fila de la taula HTML amb <nowiki></tr></nowiki>
 
##Tanquem la taula amb <nowiki></table></nowiki>
 
##Tanquem la taula amb <nowiki></table></nowiki>
 +
 +
 +
== 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>
 +
<nowiki><h1>Exemple de lectura de dades a MySQL</h1></nowiki>
 +
 
 +
<?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);
 +
}
 +
?>
 +
 +
<nowiki><!-- (3.1) aquí va la taula HTML que omplirem amb dades de la BBDD --></nowiki>
 +
<nowiki><table></nowiki>
 +
<nowiki><!-- la capçalera de la taula l'hem de fer nosaltres --></nowiki>
 +
<nowiki><thead><td colspan="5" align="center" bgcolor="cyan">Llistat de films disponibles</td></thead></nowiki>
 +
<?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 <tr>
 +
echo "\t<tr>\n";
 +
 
 +
# (3.4) cadascuna de les columnes ha d'anar precedida d'un <td>
 +
# després concatenar el contingut del camp del registre
 +
# i tancar amb un </td>
 +
echo "\t\t<td>".$registre["titol_original"]."</td>\n";
 +
echo "\t\t<td>".$registre['titol_traduit']."</td>\n";
 +
echo "\t\t<td>".$registre["director"]."</td>\n";
 +
echo "\t\t<td>".$registre['productora']."</td>\n";
 +
 +
# (3.5) tanquem la fila
 +
echo "\t</tr>\n";
 +
}
 +
?>
 +
  <nowiki><!-- (3.6) tanquem la taula --></nowiki>
 +
</table>
 +
</body>
 +
 
 +
</html>

Revisió del 16:36, 18 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, que serà de 2 bucles aniuats:

  • 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.
  • Bucle de camps: (for) iterarà per cadascun dels camps del registre (columnes de la taula). Aquest sí que podem fer un clàssic bucle for ja que sí podem saber quants camps té el nostre registre (està emmagatzemat en un array).


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>