You are on page 1of 3

Master Internacional en Software Libre

Bases de Datos
Ejemplo prctico PHP + PostgreSQL
El ejemplo consiste en la realizacin de una pgina PHP que nos devolver a cada consulta, un
registro de una tabla al azar.
Para ello crearemos la tabla 'CitasCitables', realizaremos una carga de datos, y comentaremos el
cdigo PHP utilizado.

Creacin de los campos.


La sentencia SQL para la creacin de la tabla ser:
CREATE TABLE CITAS_CITABLES (
ID_CC DECIMAL NOT NULL,
CITA VARCHAR(250) NOT NULL,
AUTOR VARCHAR(100),
CONSTRAINT PK_ID_CC PRIMARY KEY (ID_CC));

Carga de datos.
Ubicaremos el fichero de CitasCitables.txt en un directorio conocido, y ejecutaremos el siguiente
comando (adaptndolo al sistema operativo concreto que utilicemos):
COPY CITAS_CITABLES
FROM 'c:/CitasCitables.txt' WITH DELIMITER '\t';

Consultas SQL de prueba.


Para verificar si se han cargado los 350 registros que contiene el fichero de texto, realizaremos la
consulta:
SELECT COUNT(*) FROM CITAS_CITABLES;

Programa PHP.
El programa consta de cuatro partes diferenciadas:
La conexin.
La consulta del numero de registros.
La generacin de un numero al azar (entre uno y el numero de registros).
La visualizacin de la cita que se ha elegido al azar.
Aunque el cdigo PHP es auto-explicativo, se deberan de remarcar los tag de apertura y de
cierre que se utilizan para indicar que una seccin debe ser interpretada como PHP, y que en la

Master Internacional en Software Libre


Bases de Datos
lnea 13 (donde se ejecuta el pg_connect) se debe utilizar el nombre de la base de datos, de
usuario y contrasea que correspondan a la instalacin donde se ejecute.
<HTML>
<HEAD>
<TITLE>Citas Citable</TITLE>
</HEAD>
<BODY>
<?php
/*************************************************/
/* Ejemplo programa PHP con conexi a PostgreSQL */
/*************************************************/
/* Conexin a la base de datos */
$conexion = pg_connect("host=localhost port=5432 dbname=postgres password=1234
user=postgres") or die("<BR>ERROR accediendo a la BD!<BR>");
/* Sacamos la fecha y la hora por pantalla */
echo "".date("d/m/y - H:i:s")."";
/* Contamos cuantos registros tenemos en la tabla */
$sql = "select count(*) from citas_citables";
$resultado_set = pg_Exec ($conexion, $sql);
$TotalRegistros = pg_result($resultado_set, 0);
/* Calculamos un numero al azar entre uno y el numero de registros de la tabla */
$RegistroElegido = rand(1, $TotalRegistros);
/* Realizamos una consulta para extraer el registro elegido */
$sql = "select * from citas_citables where id_cc = $RegistroElegido";
$resultado_set = pg_Exec ($conexion, $sql);
/* Mostramos la cita por pantalla */
?><BR><BR><BR>
<font size=3><div style="width:500px;height:100px;float: left;border-top: 1px solid
#000; border-bottom: 2px solid #000; padding: 5px;">
<?php
echo "<BR>".pg_result($resultado_set, 0, 1)."<BR>";
?>
</div> </font>
<?php
echo "<BR><BR><BR><BR><BR><BR>".pg_result($resultado_set, 0, 2)."";
/* Cerramos la conexin con la base de datos */
pg_close($conexion);
?>
</BODY>
</HTML>

El programa citascitables.php se deber guardar en el directorio htdocs de la instalacin del


Apache.
Para ejecutar el programa, se deber utilizar la URL:
http://localhost/citascitables.php

La pgina php que genera dicho programa contiene el siguiente cdigo html:

Master Internacional en Software Libre


Bases de Datos
<HTML>
<HEAD>
<TITLE>Citas Citable</TITLE>
</HEAD>
<BODY>
13/02/07 - 00:28:49<BR><BR><BR>
<font size=3><div style="width:500px;height:100px;float: left;border-top: 1px solid
#000; border-bottom: 2px solid #000; padding: 5px;">
<BR>Un hombre feliz es aquel que, durante el da por su trabajo, y de noche por su
cansancio, no tiene tiempo de pensar en sus cosas.<BR> </div> </
<BR><BR><BR><BR><BR><BR>Gary Cooper (1900-1961)
</BODY>
</HTML>

La aplicacin funcionando tiene el siguiente aspecto:

Se propone como ejercicio complementario la reforma del programa para que las citas aparezcan
de forma secuencial (en lugar de aleatoriamente), a medida que la pgina sea generada.
Para asegurar una buena concurrencia en escenarios con multitud de usuarios, se recomienda
usar una secuencia. Al recuperar el valor de la misma, se deber de dividir por el numero de
registros, para pasar a utilizar el modulo restante para acceder al 'siguiente registro'.

You might also like