informaticaPC

Tutorial de PHP

PHP y PostgreSQL

PHP y PostgreSQL

Veamos un ejemplo de cómo trabajar con bases de datos PostgreSQL, para ello en la base de datos template1 crea la siguiente tabla que utilizaremos en el ejemplo:

create table tbl_personas (
    id integer not null check (id > 0),
    nombre varchar(50) not null,
    primary key (id)
)

NOTA: a día de hoy, la última versión disponible (PostgreSQL 9) no soporta unsigned, en su lugar podemos usar la cláusula check.

Creamos una función usando pg_connect() para conectar con PostgreSQL, y pg_last_error() que nos devolverá un mensaje de error si se produjo alguno (lo detectamos con or die, que detendrá la ejecución):

<?php
    function conectar_PostgreSQL( $usuario, $pass, $host, $bd )
    {
        $conexion = pg_connect( "user=".$usuario." ".
                                "password=".$pass." ".
                                "host=".$host." ".
                                "dbname=".$bd
                              ) or die( "Error al conectar: ".pg_last_error() );

        return $conexion;
    }
?>

Creamos otra función para borrar todos los registros de la tabla o sólo el especificado. Para procesar una consulta (tanto de selección como de actualización) usaremos la función pg_query():

<?php
    function borrarPersona( $conexion, $id )
    {
        $sql = "DELETE FROM tbl_personas";

        // Si 'id' es diferente de 'null' sólo se borra la persona con el 'id' especificado:
        if( $id != null )
            $sql .= " WHERE id=".$id;

        // Ejecutamos la consulta (se devolverá true o false):
        return pg_query( $conexion, $sql );
    }
?>

Función para insertar un registro en la tabla:

<?php
    function insertarPersona( $conexion, $id, $nombre )
    {
        $sql = "INSERT INTO tbl_personas VALUES (".$id.", '".$nombre."')";

        // Ejecutamos la consulta (se devolverá true o false):
        return pg_query( $conexion, $sql );
    }
?>

Otra función para modificar un registro:

<?php
    function modificarPersona( $conexion, $id, $nombre )
    {
        $sql = "UPDATE tbl_personas SET nombre='".$nombre."' WHERE id=".$id;

        // Ejecutamos la consulta (se devolverá true o false):
        return pg_query( $conexion, $sql );
    }
?>

Creamos una función más para listar la tabla completa, en la cual utilizamos pg_num_rows() (devuelve el número de registros encontrados) y pg_fetch_object() (devuelve los valores de los campos en un Objeto de PHP):

<?php
    function listarPersonas( $conexion )
    {
        $sql = "SELECT * FROM tbl_personas ORDER BY id";
        $ok = true;

        // Ejecutar la consulta:
        $rs = pg_query( $conexion, $sql );

        if( $rs )
        {
            // Obtener el número de filas:
            if( pg_num_rows($rs) > 0 )
            {
                echo "<p/>LISTADO DE PERSONAS<br/>";
                echo "===================<p />";

                // Recorrer el resource y mostrar los datos:
                while( $obj = pg_fetch_object($rs) )
                    echo $obj->id." - ".$obj->nombre."<br />";
            }
            else
                echo "<p>No se encontraron personas</p>";
        }
        else
            $ok = false;

        return $ok;
    }
?>

Por último, creamos una función que procesará una consulta y nos devolverá un Objeto en PHP con los datos del registro encontrado:

<?php
    function buscarPersona( $conexion, $id )
    {
        $sql = "SELECT * FROM tbl_personas WHERE id=".$id."";
        $devolver = null;

        // Ejecutar la consulta:
        $rs = pg_query( $conexion, $sql );

        if( $rs )
        {
            // Si se encontró el registro, se obtiene un objeto en PHP con los datos de los campos:
            if( pg_num_rows($rs) > 0 )
                $devolver = pg_fetch_object( $rs, 0 );
        }

        return $devolver;
    }
?>

A continuación, el código fuente principal del programa. Observa que debemos introducir los datos de acceso (usuario, contraseña, dirección IP y nombre de la base de datos) para conectar con PostgreSQL:

<?php
    // Conectar (se detendrá la ejecución si se produce un error):
    $conexion = conectar_PostgreSQL( "TU_USUARIO", "TU_PASSWORD", "IP_DEL_SERVIDOR", "template1" );

    // Borrar todos los datos de la tabla:
    $ok = borrarPersona( $conexion, null );

    if( $ok == false )
        echo "Error al borrar los datos.<br/>";
    else
        echo "Datos borrados correctamente.<br/>";

    // insertar una persona:
    $ok = insertarPersona( $conexion, 1, 'Juan Rodríguez P.' );

    if( $ok == false )
        echo "Error al insertar los datos.<br/>";
    else
        echo "Datos insertados correctamente.<br/>";

    // insertar una persona:
    $ok = insertarPersona( $conexion, 2, 'Juan Rodríguez P.' );

    // insertar una persona:
    $ok = insertarPersona( $conexion, 3, 'Roberta Amador H.' );

    // Modificar la persona número 2:
    $ok = modificarPersona( $conexion, 1, "Alfredo Ramírez E." );

    if( $ok == false )
        echo "Error al modificar los datos.<br/>";
    else
        echo "Datos modificados correctamente.<br/>";

    // Modificar la persona:
    $ok = listarPersonas( $conexion );

    if( $ok == false )
        echo "<p>Error al listar los datos.</p>";
    else
        echo "<p>Datos listados correctamente.</p>";

    // Buscar los datos de la persona con 'id=2'
    $obj = buscarPersona( $conexion, 2 );

    if( $obj == null )
        echo "No se encontró la persona";
    else
        echo "El nombre de la persona con el código: [".$obj->id."] es [".$obj->nombre."]";

    // Cerrar la conexión a PostgreSQL
    pg_close( $conexion );
?>

Descargar ejemplo

Acceder a PostgreSQL desde PHP

También disponemos de la función pg_send_query() que permite enviar una consulta de forma asíncrona, pudiendo así enviar varias a la vez e irlas obteniendo de una en una con pg_result().

Más información

Vea también: [ pg_connect() ] - [ pg_query() ] - [ pg_num_rows() ] - [ pg_fetch_object() ] - [ pg_close() ]

Más información

Vea también: [ pg_send_query() ] - [ pg_result() ]

Excepciones en conexión y consultas a PostgreSQL

La función de PHP pg_connect() devuelve false si ocurre un error, aunque puede resultar interesante usar la siguiente que arrojará una excepción caso de producirse alguno:

<?php
    function conectar_PostgreSQL( $usuario, $pass, $host, $bd )
    {
        $conexion = null;

        try
        {
            $conexion = pg_connect( "user=".$usuario." ".
                                                     "password=".$pass." ".
                                                     "host=".$host." ".
                                                     "dbname=".$bd
                                                   );

            if( $conexion == false )
                throw new Exception( "Error PostgreSQL ".pg_last_error() );
        }
        catch( Exception $e )
        {
            throw $e;
        }

        return $conexion;
    }
?>

La siguiente función también nos resultará útil puesto que pg_query() tampoco devuelve una excepción, sino únicamente false:

<?php
    function my_pg_query( $conexion=null, $sql )
    {
        $rs = @pg_query( $conexion, $sql );

        if( $rs == false )
            throw new Exception( "Error PostgreSQL ".pg_last_error() );

        return $rs;
    }
?>

NOTA: La arroba @ se utiliza antes del nombre de una función para que no se muestren por pantalla mensajes de aviso o error (en caso de que se produzcan).

Convertir fecha para almacenarla en MySQL y PostgreSQL

Las fechas en MySQL y PostgreSQL se almacenan en formato yyyy-mm-dd así como también en formato UNIX.

Para convertir una cadena de texto en formato de fecha dd/mm/yyyy a yyyy-mm-dd podemos usar la siguiente función:

<?php
    function DMY_to_YMD( $fecha_dmy )
    {
        $fecha_formateada = null; 
        $aFecha = explode("/", $fecha_dmy);

        // Comprobar si la fecha es válida
        if( checkdate( $aFecha[1], $aFecha[0], $aFecha[2]) === true )
            $fecha_formateada = $aFecha[2]."-".$aFecha[1]."-".$aFecha[0];

        return $fecha_formateada;
    }

    // -------------------------------------------------------------------

    $fecha1 = DMY_to_YMD("20/10/2011");		// Devuelve: "10-20-2011"

    if( $fecha1 != "" )
        echo $fecha1."<br />";
    else
        echo "La primera fecha no es válida";

    $fecha2 = DMY_to_YMD("30/02/2011");		// Devuelve una cadena vacía

    if( $fecha2 != "" )
        echo $fecha2."<br />";
    else
        echo "La segunda fecha no es válida";
?>

Descargar ejemplo

Primera página Anterior Siguiente Última página
Usamos cookies para ofrecerte una experiencia mejorada, el continuar navegando supone que aceptas su uso