Está en la página 1de 11

UTN FRBA – Professional Webmaster

6 Pasos “mágicos” para hacer consultas MySQL con PHP


La finalidad de este apunte es mostrar el patrón que siguen las consultas MySQL desde PHP,
con el objetivo de que el alumno pueda abstraer los ejemplos concretos que vieron en clase y
utilizar las herramientas vistas para cualquier caso, sin pensar en primera instancia en las
particularidades de la información que maneje para un trabajo determinado, si no pensando en
qué quiere hacer con esa información y qué herramientas usar para cada caso.

Durante el apunte se irá trabajando sobre un ejemplo sencillo en donde se recuperará


información almacenada en una base de datos MySQL y se mostrará en pantalla con un script
php. Se dan por sentado conocimientos sobre MySQL y manejo básico de PHP.

Supongamos que tenemos la base de datos de un sitio web para una inmobiliaria, donde se
almacena información sobre los inmuebles que administra la inmobiliaria y los barrios en donde
se encuentra cada inmueble.

La base de datos se llamará “inmobiliaria”, y constará de las siguientes tablas:

Inmuebles
idinmueble direccion idbarrio tipo ambientes antiguedad descripcion tipodeoferta precio
Superficie 66
Gabriela
m2, 1 baño,
1 Mistral 1 casa 3 0 venta 90000
parrilla,
2990
lavadero
Medrano Superficie
2 2 departamento 2 9 alquiler 500
1052 50m2, balcón.
Salvador
María del Lavadero,
3 1 departamento 2 0 alquiler 660
Carril balcón
2000
Avalos Terraza, patio,
5 2 ph 3 25 venta 79500
1021 sup. 72m2
Ruiz de Comedor
los amplio,
7 4 casa 6 40 venta 190000
Llanos lavadero,
931 jardín
Superficie
Bruselas
13 4 departamento 2 0 cubierta: 50 venta 62000
1032 3º
m2, semipiso.
Superficie
El cubierta: 75
14 Criollo 4 departamento 3 4 m2, lavadero alquiler 1200
1344 independiente,
2 baños.
45 m2 de
Fragueiro
15 4 departamento 2 40 superficie, venta 38000
431 4º
buen estado.
96 m2, con
Tinogasta
16 4 casa 4 9 jardín al venta 92000
5820
frente.

carla.griggio@gmail.com Página 1 de 11
UTN FRBA – Professional Webmaster

Barrios
idbarrio barrio comuna localidad
1 Villa Pueyrredón 12 Capital Federal
2 Almagro 5 Capital Federal
3 Villa Urquiza 12 Capital Federal
4 Versailles 10 Capital Federal

Esta información fue almacenada en una base de datos y no como texto de un HTML ya que son
datos que pueden cambiar constantemente, ya sea por modificaciones, agregados o bajas.
Siempre que nos encontremos con un sitio que contenga información dinámica conviene delegar
toda la información a una base de datos, y que el sitio en sí se encargue de cómo mostrar esos
datos sean cuales sean, sean cuantos sean, para ahorrarnos el trabajo de estar actualizando
constantemente un archivo HTML.

A partir de esta base de datos, se realizará un script php que muestre un listado como el
siguiente, donde de todos los inmuebles almacenados en la base, sólo se mostrarán los
que estén a la venta, con su dirección, precio, antigüedad, ambientes y nombre de barrio
al que pertenecen:

Dirección Barrio Antigüedad Ambientes Precio


Villa
Gabriela Mistral 2990 0 3 $90000
Pueyrredón
Salvador María del Carril Villa
0 2 $660
2000 Pueyrredón
Medrano 1052 Almagro 9 2 $500
Avalos 1021 Almagro 25 3 $79500
Ruiz de los Llanos 931 Versailles 40 6 $190000
Bruselas 1032 3º Versailles 0 2 $62000
El Criollo 1344 Versailles 4 3 $1200
Fragueiro 431 4º Versailles 40 2 $38000
Tinogasta 5820 Versailles 9 4 $92000

Ese mismo listado será nuestra página php. Ahora, veamos por dónde empezar para
llegar a obtener ese resultado.

PASO 1: Conexión con el servidor MySQL y selección de la


base de datos con la que se trabajará

SIEMPRE que vaya a usar bases de datos en un script, antes de cualquier acción
relacionada se debe realizar una conexión a MySQL (el servidor de bases de datos con
el que estamos trabajando) y seleccionar la base de datos que contiene la información
que queremos mostrar (ya que en un mismo servidor pueden haber muchas bases de
datos).

Es recomendable que el código que establece esta conexión esté en un archivo aparte,
para poder reutilizar este código en todas las páginas PHP donde necesitemos
conectarnos a la base de datos.

carla.griggio@gmail.com Página 2 de 11
UTN FRBA – Professional Webmaster

Entonces, creamos un archivo conexion.php que constará simplemente de las siguientes


líneas:

conexion.php
<? mysql_connect("localhost", "root", "");
mysql_select_db("inmobiliaria");
?>

La primer línea es una función que realiza una conexión al servidor de MySQL
“localhost” (ya que estamos trabajando localmente), con username “root” y sin
password.
La segunda línea selecciona a la base de datos llamada “inmobiliaria” dentro del
servidor al que nos acabamos de conectar.

Ahora, ya que tenemos el archivo de conexión, creemos otro archivo donde se realizará
el listado, que por el momento lo único que tendrá será la inclusión de conexion.php y
el HTML básico de toda página. El archivo se llamará inmueblesVenta.php.

inmueblesVenta.php (paso 1):


<?
//paso 1
include("conexion.php");
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-
8859-1" />
<title>Inmuebles</title>
</head>

<body>
</body>
</html>

PASO 2: Definir la consulta MySQL que obtendrá la


información que quiero mostrar en la página.

Teniendo en cuenta la estructura de la base de datos y la información que quiero mostrar


por pantalla, pienso cómo sería la consulta MySQL que cumpla con el objetivo y la
almaceno en una variable. En este caso, sólo queremos obtener los datos que figurarán
en el listado, con la particularidad de que sólo queremos que se listen los registros de
inmuebles que sean para la venta, y que en lugar del id del barrio de cada inmueble
queremos que se muestre su nombre.

La consulta que cumple con ese objetivo es:

carla.griggio@gmail.com Página 3 de 11
UTN FRBA – Professional Webmaster

SELECT direccion, barrio, antiguedad, ambientes, precio


FROM inmuebles,barrios
WHERE inmuebles.idbarrio=barrios.idbarrio

Una vez que sabemos qué consulta cumple con lo que queremos mostrar por pantalla,
guardamos a esta consulta en una variable (por ejemplo, $consulta) en nuestro script
php. Ahora, inmueblesVenta.php quedaría así:

inmueblesVenta.php (paso 2):


<?
//paso 1
include("conexion.php");

//paso 2
$consulta="SELECT direccion, barrio, antiguedad, ambientes,
precio
FROM inmuebles,barrios
WHERE inmuebles.idbarrio=barrios.idbarrio";

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-
8859-1" />
<title>Inmuebles</title>
</head>

<body>
</body>
</html>

PASO 3: Ejecutar la consulta MySQL.

Hasta acá, sólo guardamos en una variable (de texto) la consulta que queremos que se
ejecute, pero todavía no “hicimos” realmente nada más que la conexión.

Para que esta consulta se ejecute en el servidor al que nos conectamos anteriormente,
usamos la función mysql_query(), que envía la consulta al servidor y devuelve el
resultado de haberla ejecutado. Ese resultado se guardará en una variable (por ejemplo,
$resultado) que almacenará la información con la que trabajaremos luego. Ese resultado
es en sí la información que queremos mostrar.

El paso 3 se concretaría con el siguiente código:

$resultado=mysql_query($consulta);

carla.griggio@gmail.com Página 4 de 11
UTN FRBA – Professional Webmaster

Y el código de inmueblesVenta.php quedaría de la siguiente manera:

inmueblesVenta.php (paso 3):


<?
//paso 1
include("conexion.php");

//paso 2
$consulta="SELECT direccion, barrio, antiguedad, ambientes,
precio
FROM inmuebles,barrios
WHERE inmuebles.idbarrio=barrios.idbarrio";

//paso 3
$resultado=mysql_query($consulta);

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-
8859-1" />
<title>Inmuebles</title>
</head>

<body>
</body>
</html>

PASO 4: Armar el “esqueleto” en HTML en donde se ubicará la


información traída de la base de datos.

Antes de seguir, sería recomendable armar el HTML donde se mostrará la información


que traigamos de la base de datos. Este HTML puede ser una tabla, un div (o varios) o
simplemente texto en donde dejaremos los “huecos” donde iría la información que
queremos mostrar de manera dinámica.

carla.griggio@gmail.com Página 5 de 11
UTN FRBA – Professional Webmaster

CASO A: Se quiere mostrar la información de UN registro.

Por ejemplo, si el objetivo de este script fuera mostrar la información de UN inmueble,


la consulta MySQL podría ser algo como:

SELECT direccion, barrio, antiguedad, ambientes, precio


FROM inmuebles,barrios
WHERE inmuebles.idbarrio=barrios.idbarrio AND idinmueble=5

Nótese que en la cláusula WHERE está la condición idinmueble=5 que


asegurará que la consulta devuelva sólo un registro, ya que los
id de las tablas son siempre únicos para cada registro.

El esqueleto podría tratarse simplemente de un texto así (en HTML):

Direcci&oacute;n: <!-- Hueco --><br />


Ambientes: <!-- Hueco --><br />
Barrio: <!-- Hueco --><br />
Antig&uuml;edad: <!-- Hueco --><br />
Precio: $<!-- Hueco --><br />

Donde el “hueco” que dejamos está después de los dos puntos de cada renglón.

CASO B: Se quiere mostrar la información de MUCHOS registros.

Pero en nuestro caso queremos mostrar a MUCHOS inmuebles, y no sabemos cuántos.


En estos casos lo que se suele hacer es preparar el esqueleto como para UN inmueble, y
luego con php nos encargaremos de que ese esqueleto se repita para cada inmueble que
haya que mostrar.

Por ejemplo, si queremos que este script muestre una tabla listando a todos los
inmuebles, nuestro esqueleto sólo constará de una tabla de 2 filas y tantas columnas
como datos queramos mostrar de un inmueble. La primer fila será el encabezado de la
tabla, y la segunda mostraría la información de un inmueble. Otro detalle a tener en
cuenta, es que los precios en la base de datos están sin el signo $, entonces en el
esqueleto lo agregamos, para que la estructura ya quede lista de manera que sólo le falte
la información que viene de la base.

El esqueleto quedaría así:

Inmuebles para Venta


Dirección Barrio Antigüedad Ambientes Precio
$

carla.griggio@gmail.com Página 6 de 11
UTN FRBA – Professional Webmaster

Y ya que es mero HTML, se puede armar con las herramientas que provee el
Dreamweaver, como si no se tratase (todavía) de una página dinámica.

La página inmueblesVenta.php con el HTML del esqueleto incluído en el <body>


quedaría como en el script a continuación. En el HTML están marcados los huecos que
se completarían con la información dinámica para un inmueble.

inmueblesVenta.php (paso 4):


<?
//paso 1
include("conexion.php");

//paso 2
$consulta="SELECT direccion, barrio, antiguedad, ambientes,
precio
FROM inmuebles,barrios
WHERE inmuebles.idbarrio=barrios.idbarrio";

//paso 3
$resultado=mysql_query($consulta);

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-
8859-1" />
<title>Inmuebles</title>
</head>

<body>
<!-- PASO 4: Esqueleto HTML para la informacion dinamica -->
<h1>Inmuebles para Venta</h1>
<table width="500" border="1" cellspacing="0" cellpadding="0">
<tr>
<th>Direcci&oacute;n</th>
<th>Barrio</th>
<th>Antig&uuml;edad</th>
<th>Ambientes</th>
<th>Precio</th>
</tr>
<tr>
<td><!-- Hueco --></td>
<td><!-- Hueco --></td>
<td><!-- Hueco --></td>
<td><!-- Hueco --></td>
<td><!-- Hueco --></td>
</tr>
</table>
</body>
</html>

carla.griggio@gmail.com Página 7 de 11
UTN FRBA – Professional Webmaster

PASO 5: Recuperar la información de cada registro


almacenado en el resultado de la consulta.

CASO A: Se quiere mostrar la información de UN registro.

Cuando la consulta fue preparada para seleccionar UN solo registro, guardamos a ese
registro en forma de array en una variable (por ejemplo, $fila) antes del esqueleto en
HTML donde finalmente se mostraría la información.

En este paso, sólo se obtendrá del resultado general de la consulta a la información de


un registro particular.

El código para hacer eso sería:

$fila=mysql_fetch_array($resultado);

E iría justo antes del esqueleto HTML (por supuesto, en un bloque PHP).

CASO B: Se quiere mostrar la información de MUCHOS registros.

A veces la consulta que hicimos a la base de datos recuperará información para muchos
registros y que no sabemos cuántos serán, como en el ejemplo concreto que estamos
viendo donde se listarán todos los inmuebles que estén a la venta.

Cuando se recupera información para muchos registros, hay que identificar qué parte
del esqueleto HTML se repetirá, y encerrarla en un while que tenga la condición
“mientras haya registros”. Esa condición es ni más ni menos que la obtención de un
registro del resultado total de la consulta y su almacenamiento en un array (como en el
CASO A).

En este ejemplo, el código HTML que se repite por cada registro que viene de la base de
datos es la segunda fila de la tabla que armamos anteriormente, entonces, desde que
empieza la fila (<tr>) hasta que termina (</tr), el código quedará encerrado por el while
mencionado, y por cada registro que haya traído la consulta, se repetirá una fila con la
estructura armada.

El código de inmueblesVenta.php entonces quedaría así:

carla.griggio@gmail.com Página 8 de 11
UTN FRBA – Professional Webmaster

inmueblesVenta.php (paso 5):


<?
//paso 1
include("conexion.php");

//paso 2
$consulta="SELECT direccion, barrio, antiguedad, ambientes,
precio
FROM inmuebles,barrios
WHERE inmuebles.idbarrio=barrios.idbarrio";

//paso 3
$resultado=mysql_query($consulta);

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-
8859-1" />
<title>Inmuebles</title>
</head>

<body>
<!-- paso 4: Esqueleto HTML para la informacion dinamica -->
<h1>Inmuebles para Venta</h1>
<table width="500" border="1" cellspacing="0" cellpadding="0">
<tr>
<th>Direcci&oacute;n</th>
<th>Barrio</th>
<th>Antig&uuml;edad</th>
<th>Ambientes</th>
<th>Precio</th>
</tr>
<?
//paso 5
while($fila=mysql_fetch_array($resultado)) { ?>
<tr>
<td><!-- Hueco --></td>
<td><!-- Hueco --></td>
<td><!-- Hueco --></td>
<td><!-- Hueco --></td>
<td><!-- Hueco --></td>
</tr>
<? } ?>
</table>
</body>
</html>

carla.griggio@gmail.com Página 9 de 11
UTN FRBA – Professional Webmaster

PASO 6: Rellenar los huecos del esqueleto con la información


dinámica.

Este es el último paso y es muy sencillo.

En $fila nos quedó almacenado un array con la misma estructura de cada registro del
resultado de la consulta a la base de datos. Si en la consulta nosotros pedimos los
campos direccion, barrio, antiguedad, ambientes y precio (en ese orden), cada vez que
se ejecute la sentencia:

$fila=mysql_fetch_array($resultado)

en $fila quedará la siguiente estructura:

$fila
(valor) (valor) (valor) (valor) (valor)
“direccion” “barrio” “antiguedad” “ambientes” “precio”

Donde la primera vez, los valores serán para el primer registro en el resultado, la
segunda vez para el segundo registro, la tercera para el tercer registro, etc. Sin que esto
nos importe mucho, y pensando que del orden y la cantidad de veces que se muestre una
fila del esqueleto se encarga el ciclo while, sólo nos concentramos en rellenar los
huecos que dejamos en el esqueleto para cada campo de la tabla, refiriéndonos a cada
dato en el array $fila por el mismo nombre que figura en la consulta MySQL.

Por ejemplo, para mostrar el campo “direccion” del array $fila, habría que ejecutar la
sentencia:

echo $fila["direccion"];

en el espacio apropiado dentro del esqueleto.

A continuación figura el código final de inmueblesVenta.php. Junto a este apunte


fueron adjuntados los archivos php y sql del ejemplo tratado.

Estos pasos pueden usarse para cualquier consulta con el objetivo de mostrar
información desde una base de datos en una página. Lo único que cambiaría para otros
casos sería la consulta SQL, el esqueleto HTML y el relleno del mismo, y los 3 cambios
estarían estrechamente relacionados con la información que se quiera mostrar en la
página.

carla.griggio@gmail.com Página 10 de 11
UTN FRBA – Professional Webmaster

inmueblesVenta.php (paso 6 - final):


<?
//paso 1
include("conexion.php");

//paso 2
$consulta="SELECT direccion, barrio, antiguedad, ambientes,
precio
FROM inmuebles,barrios
WHERE inmuebles.idbarrio=barrios.idbarrio";

//paso 3
$resultado=mysql_query($consulta);

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-
8859-1" />
<title>Inmuebles</title>
</head>

<body>
<!-- paso 4: Esqueleto HTML para la informacion dinamica -->
<h1>Inmuebles para Venta</h1>
<table width="500" border="1" cellspacing="0" cellpadding="0">
<tr>
<th>Direcci&oacute;n</th>
<th>Barrio</th>
<th>Antig&uuml;edad</th>
<th>Ambientes</th>
<th>Precio</th>
</tr>
<?
//paso 5
while($fila=mysql_fetch_array($resultado)) { ?>
<tr>
<td><? /* paso 6 */ echo $fila["direccion"]; ?></td>
<td><? /* paso 6 */ echo $fila["barrio"]; ?></td>
<td><? /* paso 6 */ echo $fila["antiguedad"]; ?></td>
<td><? /* paso 6 */ echo $fila["ambientes"]; ?></td>
<td>$<? /* paso 6 */ echo $fila["precio"]; ?></td>
</tr>
<? } ?>
</table>
</body>
</html>

carla.griggio@gmail.com Página 11 de 11

También podría gustarte