En este post explicare detalladamente como podemos instalar y configurar postgresSQL y posteriormente acceder a una base de datos utilizando código php, en un sistema operativo linux basado en debian. Porque linux? porque correr cualquier cosa que no ha sido diseñada por Microsoft sobre windows resulta en una perdida de desempeño en las aplicaciones terrible, si vas a usar windows es mejor quedarse con SQLServer, IIS y cualquier lenguaje pagado que se utilice hoy en dia 🙂

Instalacion y Configuración

Como pre-requisito necesitamos instalar un poco de software en nuestra amada terminal:

sudo aptitude update && sudo aptitude install apache2 postgresql-contrib php7.0-pgsql libapache2-mod-php7.0

Cuando la instalacion este completa vamos al directorio /var/www/html  y editamos o creamos un archivo index.php con el siguiente contenido

<?php
   phpinfo();
?>

Al acceder a nuestro localhost (que puede ser la direccion ip del servidor, o bien la palabra localhost en la barra de direcciones si estamos corriebdolo localmente) deberiamos ver el listado de configuraciones de php. Entre ellos deberiamos poder ver las configuraciones cargadas para hacernos cargo de las conexiones con postgresSQL

Configurando usuarios y bases de datos en postgreSQL

primero es necesario configurar una contraseña para el usuario postgres que vamos a estar usando, para ello corremos los suguientes comandos

$> sudo -u postgres psql postgres

Esto nos dara un pormt dentro del motor. Una vez dentro ponemos el siguiente comando

$> \password postgres

Nos preguntara por un nuevo password y la confirmación del nuevo password. Luego de eso nos salimos y probamos la conexion

$> psql -h localhost -p 5432 -U postgres

Al hacer esto nos preguntara por el password que acabamos de crear, lo ponemos y deberia dejarnos entrar igual!

Una vez dentro (de nuevo) vamos a crear nuestra base de datos, muy similar a como lo hacemos con mySQL.

CREATE DATABASE test;

Y para verificar que todo fue bien listamos las bases de datos creadas

\l

* como parece un 1 aclaramos, es “backslash ele” \l

y deberemos obtener un output como este:

                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 test

Vemos que todo esta bien y a partir de aqui toda la sintaxis es bastante estandar (SQL) para crear tablas e insertar registros, y procedemos. Manos al código!

Conexión con php

Ahora en el mismo directorio publico podemos colocar un nuevo archivo php para este ejercicio. lo llamaremos prueba.php, y colocamos el siguiente código.

<?php

// detalles de la conexion
$conn_string = "host=localhost port=5432 dbname=test user=postgres password=r00t options='--client_encoding=UTF8'";

// establecemos una conexion con el servidor postgresSQL
$dbconn = pg_connect($conn_string);

// Revisamos el estado de la conexion en caso de errores. 
if(!$dbconn) {
echo "Error: No se ha podido conectar a la base de datos\n";
} else {
echo "Conexión exitosa\n";
}

// Close connection
pg_close($dbconn);

?>

Ahora que tenemos una conexión valida es necesario poder hacer querys en la base de datos. Para ello veamos el siguiente bloque de código:

$query = "SELECT nombre, distrito FROM ciudad WHERE countrycode='GT'";
$ciudades = pg_query($query) or die('Error: ' . pg_last_error());
$resutado = array();
while ($row = pg_fetch_assoc($ciudades)) {
   $resutado[] = $row;
}

//agregamos los encabezados correspondientes a la respuesta
//un paso muy improtante que todos se saltean
http_response_code(200)
header("Content-type:application/json");

// codificar la respuesta en formato JSON
echo json_encode($resutado);

Conclusión

Y asi es como configuramos nuestro servidor desde 0, para que corra postreSQL junto con php.

id y enseñad a todos!

Categorized in:

Tagged in:

, ,