lunes, 20 de octubre de 2008

PHP y Postgres

Es relativamente fácil utilizar la base de datos Postgres en PHP. Si anteriormente habías conectado PHP con MySQL, es practicamente lo mismo.

1.- Modificamos el PHP.ini para agregar la extensión de pgsql. En ambiente Windows basta con teclear en menú ejecutar php.ini para abrirlo y modificarlo. En linux deberas de localizarlo en la carpeta de Apache.

2.- Dentro de este archivo, en el caso de windows bastara con descomentar la siguiente línea:

extension=php_pgsql.dll

3.- En ambiente Linux son varias líneas que se pueden descomentar y modificar; cada una de ellas tiene comentado su descripción, por ejemplo:

pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0

4- Todo esto con el fin de preparar la conexión. Es importante reiniciar el servidor Apache una vez guardados los campos.

5.- Para establecer una conexión PHP - Postgres, crearemos un archivo al que llamaremos conec.php e incluiremos las siguientes lineas:

/*Utilizamos una función para establecer la conexión*/
function Conectarse()
{
/*Mediante una condicion determinamos si se establecio o no la conexion.
Usamoa la pg_connect donde colocamos los parámetros:
dbname=Nombre de la Base de Datos
port=Puerto de Conexion a la Base de Datos
user=Nombre de Usuario para conectarse
password=Password para conectarse*/
if (!($conexion = pg_connect("dbname=gyc port=5432 user=usuario password=password")))
{
/*Si la conexion no es exitosa se mostrara el siguiente mensaje y salimos*/
echo "No pudo conectarse al servidor";
exit();
}
/*No importa si se establecio o no la conexion, esta sera devuelta por la funcion*/
return $conexion;
}

/*Ahora mandamos a llamar la funcion*/
Conectarse();

6.- Este archivo lo podemos guardar en alguna parte de nuestro proyecto y usar su ruta absoluta, pero en el caso de este ejemplo, lo colocaremos en la misma carpeta donde estara el archivo en donde usaremos la Base de Datos. Este archivo se llamara ejemplosql.php




7.- En ejemplosql.php incluiremos el siguiente código:

/*Incluimos el archivo de conexión*/
include("conec.php");

/*Guardamos en una variable el valor retornado de la función de conexión*/
$con=Conectarse();

/*Guardamos en una variable la sentencia SQL, en este caso del tipo SELECT*/
$sql_select_1 = "select nombre, edad from alumnos where id_alumno = '10'";

/*Realizamos la conexión y ejecutamos la consulta SQL mediante la función
pg_Exec con los parámetros de conexión a la Base de Datos ($con) y la sentencia SQL ($sql_select_1)*/
$query_select_1 = pg_Exec($con, $sql_select_1);

/*Si todo salio bien, obtendremos un objeto con los datos obtenidos de la consulta SQL,
mediante la funcion pg_fetch_object. Solo para los casos de SELECT*/
$query_result_1 = pg_fetch_object($query_equipos);

/*Una vez obtenido los datos, los podemos todavia extraer de forma mas particular,
mediante los nombres de los campos y guardandolos en variables*/
$nombre = $query_result_1->nombre;
$edad =$query_result_1->edad;

/*Imprimos las variables, comprobando el resultado.*/
echo "El nombre es: ".$nombre;
echo "Y su edad es: $edad años";

8.- Hasta este punto, hemos logrado realizar una conexión PHP - Postgres. Si obtuvimos algun error, podremos buscarlo por medio del numero de línea, así mismo si el error esta en la sentencia SQL.

9.- La clase de sentencia SELECT que utilizamos es para obtener datos específicos en una sola fila. Si deseamos recuperar información en un resultado SELECT de mas de una línea:

/*Incluimos el archivo de conexión*/
include("conec.php");

/*Guardamos en una variable el valor retornado de la función de conexión*/
$con=Conectarse();

/*Guardamos en una variable la sentencia SQL, en este caso del tipo SELECT*/
$sql_select_2 = "select nombre, edad, grado from alumnos where edad < '18'";

/*Realizamos la conexión y ejecutamos la consulta SQL mediante la función
pg_Exec con los parámetros de conexión a la Base de Datos ($con) y la sentencia SQL ($sql_select_2)*/
$query_select_2 = pg_Exec($con, $sql_select_2);

/*Obtenemos el número de filas del resultado con la función pg_num_rows*/
$no_filas = pg_num_rows($query_select_2);

/*Mediante un ciclo for, leemos cada una de las filas*/
for ($i=0;$i<$no_filas;$i++)
{

/*Guardamos en un vector cada una de las filas durante el ciclo con la función
pg_fetch_array con los parametros del objecto SQL y el numero de fila durante el ciclo*/
$array_local = pg_fetch_array($query_ausencias_local,$i);

/*Creado el vector, y durante el ciclo, podemos leer cada una de las filas mediante sus posiciones*/
echo "Su nombre es: $array_local[0], tiene $array_local[1] años y esta en el $array_local[2] grado";
}

10.- Para el caso de sentencias SQL como update, delete e insert, se utiliza como se muestra a continuacion:

$sql_update = "update alumnos set nombre = 'Mauricio', edad = '24', grado = '8'";
pg_Exec($con, $sql_update);