Вы находитесь на странице: 1из 86

BASE DE DATOS

Luis Emilio Cabrera Crot


lucacrot@ubiobio.cl
www.lucacrot.net/bd20151
Universidad del Bo Bo
Facultad de Ciencias Empresarias
IECI

Mayo 2015

NDICE

NDICE
1

BASE DE DATOS DE P RUEBA

SQL E MBEBIDO EN JAVA


Oracle SQL y Java
PostgreSQL y Java
SQL Server y Java
SQLite y Java

SQL E MBEBIDO EN C
PostgreSQL y C

SQL E MBEBIDO EN PHP ( POSTGRE SQL)


Configuracin previa
Conectar PHP y la base de datos
Ejemplo: Mostrar Tablas
Ejemplo: Registrar Usuario
Ejemplo: Validacin Usuario
Ejemplo: Actualizar Usuario
Ejemplo: Eliminar Usuario

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

2 / 86

NDICE

ACCESO A BASE DE DATOS DESDE A PLICACIONES

Veremos como se ejecutan comandos SQL desde un programa en


un lenguaje anfitrin como PHP, C o Java.
El uso de comandos SQL desde un programa anfitrin se denomina SQL embebido.

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

3 / 86

NDICE

SQL E MBEBIDO

Las sentencias SQL se pueden utilizar en cualquier parte del programa.


Las sentencias SQL deben estar claramente identificadas de manera que un pre-procesador pueda tratarlas antes de invocar el
compilador del lenguaje anfitrin.
Pueden existir dos inconvenientes:
Los tipos de datos reconocidos por SQL podran no ser aceptados
por el lenguaje anfitrin y viceversa.
SQL est orientado a conjuntos de datos (problema de impedancia)
no as los lenguajes de programacin.

Este problema se resuelve mediante el uso de cursores.

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

4 / 86

NDICE

C URSORES

SQL opera sobre conjuntos de registros, mientras que un leguaje


anfitrin como C no soporta (de forma limpia) conjunto de registros.
Un cursor permite recuperar las filas de una relacin una por una.
Se puede declarar un cursor sobre cualquier relacin o consulta
SQL.
Un curso se puede abrir, posicionando el cursor justo antes de la
primera fila.
Leer la siguiente fila, mover el cursor o cerrar el cursor.

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

5 / 86

NDICE

I NTERACCIN CON LA BASE DE DATOS (CURSOR)


E XPLICITOS

Cursor explicito: SELECT recupera cero o una o ms tuplas.


Se requiere:
Declarar el cursor.
Abrir el cursor (OPEN).
Leer los datos (FETCH).
Cerrar el cursor y liberar los recursos (CLOSE).

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

6 / 86

NDICE

I NTERACCIN CON LA BASE DE DATOS (CURSOR)


E XPLICITOS

Declaracin del cursor: (dos formas)

F ORMA 1

DECLARE
...
CURSOR nombreCursor IS
instruccion SELECT

F ORMA 2

DECLARE
...
CURSOR nombreCursor ( param1 tipo1 , . . . , paramN tipoN ) IS
instruccion SELECT

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

7 / 86

NDICE

I NTERACCIN CON LA BASE DE DATOS (CURSOR)

Abrir el cursor
OPEN nombre_cursor ;
OPEN nombre_cursor ( valor1 , valor2 , . . . , valorN ) ;

Recuperar los datos del Buffer


FETCH nombre_cursor INTO lista_variables ;
FETCH nombre_cursor INTO registro_PL / SQL ;

Cerrar el cursor
CLOSE nombre_cursor ;

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

8 / 86

NDICE

I NTERACCIN CON LA BASE DE DATOS (CURSOR)

d e c l a r a c i o n c u r s o r
CURSOR amigas IS
SELECT Nombre FROM amigos
WHERE sexo= ' F ' ;
a b r i r c u r s o r
OPEN amigas ;
r e c o r r e r c u r s o r
FETCH amigas INTO elNombre ;
c e r r a r c u r s o r
CLOSE amigas ;

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

9 / 86

NDICE

API

API

Una alternativa al uso de SQL embebido.


Una API nos ofrece una interfaz estandarizada para objetos y procedimientos.
Permite pasar sentencias SQL desde un lenguaje anfitrin y presentar conjuntos de tuplas de una forma amigable.
Conectarse de manera remota a diversos SGBD.

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

10 / 86

BASE DE DATOS DE P RUEBA

NDICE
1

BASE DE DATOS DE P RUEBA

SQL E MBEBIDO EN JAVA


Oracle SQL y Java
PostgreSQL y Java
SQL Server y Java
SQLite y Java

SQL E MBEBIDO EN C
PostgreSQL y C

SQL E MBEBIDO EN PHP ( POSTGRE SQL)


Configuracin previa
Conectar PHP y la base de datos
Ejemplo: Mostrar Tablas
Ejemplo: Registrar Usuario
Ejemplo: Validacin Usuario
Ejemplo: Actualizar Usuario
Ejemplo: Eliminar Usuario

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

11 / 86

BASE DE DATOS DE P RUEBA

BASE DE DATOS DE P RUEBA


CREATE DATABASE Prueba ;
CREATE TABLE nombres (
id SERIAL p r i m a r y key , nombre char ( 5 0 ) ) ;
INSERT INTO nombres ( nombre ) v a l u e s ( ' L i z b e t h ' ) , ( ' Paola' ) , ( ' Maria ' ) , ( ' Pedro ' ) , ( ' Laura ' ) ;
CREATE TABLE usuarios (
id SERIAL p r i m a r y key , nombre v a r c h a r ( 5 0 ) , clave varchar (50) ) ;
INSERT INTO usuarios ( nombre , clave ) v a l u e s ( ' L i z b e t h ' , md5 ( ' 123 ' ) ) , ( ' Paola ' , md5 ( ' 456 ' ) ) , ( ' Maria ' , md5 ( ' 789 ' ) ) , ( ' Pedro ' , md5 ( ' 012 ' ) ) , ( ' Laura ' , md5 ( ' 345 ' ) ) ;

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

12 / 86

SQL E MBEBIDO EN JAVA

NDICE
1

BASE DE DATOS DE P RUEBA

SQL E MBEBIDO EN JAVA


Oracle SQL y Java
PostgreSQL y Java
SQL Server y Java
SQLite y Java

SQL E MBEBIDO EN C
PostgreSQL y C

SQL E MBEBIDO EN PHP ( POSTGRE SQL)


Configuracin previa
Conectar PHP y la base de datos
Ejemplo: Mostrar Tablas
Ejemplo: Registrar Usuario
Ejemplo: Validacin Usuario
Ejemplo: Actualizar Usuario
Ejemplo: Eliminar Usuario

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

13 / 86

SQL E MBEBIDO EN JAVA

ODBC Y JDBC

ODBC (Open DataBase Connectivity) y JDBC (Java DataBase Connectivity) tambin permiten la integracin de SQL con lenguaje anfitrin mediante una API.
Ambos ofrecen una API y permiten el uso de un nico ejecutable
para acceder a diferentes SGBD sin re-compilacin.
Por lo tanto, una aplicacin que usa ODBC o JDBC es independiente del SGBD.

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

14 / 86

SQL E MBEBIDO EN JAVA

C LASES E I NTERFACES JDBC

Todos los controladores son manejados por la clase DriverManager.


Los pasos necesarios para enviar una consulta de base de datos
a una fuente de datos y obtener los resultados son:
1
2
3

Cargar el controlador JDBC.


Conectarse a la fuente de datos.
Ejecutar las sentencias SQL.

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

15 / 86

SQL E MBEBIDO EN JAVA

C ARGAR EL CONTROLADOR

Cargar un controlador JDBC:


Class . forName ( " o r a c l e / j d b c . d r i v e r . O r a c l e d r i v e r " ) ;

Para registrar el controlador se puede incluir el controlador con la


opcin:
Djdbc . drivers=oracle / jdbc . driver

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

16 / 86

SQL E MBEBIDO EN JAVA

JDBC: E XCEPTIONS - WARNINGS

La mayora de las operaciones de java.sql pueden generar un SQLException si ocurre un error.


SQLWarning es una subclase no tan severa de SQLException.

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

17 / 86

SQL E MBEBIDO EN JAVA

O RACLE SQL Y JAVA

NDICE
1

BASE DE DATOS DE P RUEBA

SQL E MBEBIDO EN JAVA


Oracle SQL y Java
PostgreSQL y Java
SQL Server y Java
SQLite y Java

SQL E MBEBIDO EN C
PostgreSQL y C

SQL E MBEBIDO EN PHP ( POSTGRE SQL)


Configuracin previa
Conectar PHP y la base de datos
Ejemplo: Mostrar Tablas
Ejemplo: Registrar Usuario
Ejemplo: Validacin Usuario
Ejemplo: Actualizar Usuario
Ejemplo: Eliminar Usuario

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

18 / 86

SQL E MBEBIDO EN JAVA

O RACLE SQL Y JAVA

O RACLE SQL Y JAVA : C ONEXIN


i m p o r t java . sql . * ;
/ / En e s t e paquete se encuentran una s e r i e de c l a s e s que p e r m i t e n t r a b a j a r con Bases de datos .
c l a s s dbAccess {
p u b l i c s t a t i c v o i d main ( String args [ ] ) throws SQLException {
DriverManager . registerDriver ( new oracle . jdbc . driver . OracleDriver ( ) ) ;
Connection conn = DriverManager . getConnection ( " j d b c : o r a c l e : t h i n : @oracle . l o c a l d o m a i n : 1 5 2 1 : o r c l " , " username " , " password " ) ;
System . out . println ( "Me conecte : ) " ) ;
}
}

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

19 / 86

SQL E MBEBIDO EN JAVA

O RACLE SQL Y JAVA

O RACLE SQL Y JAVA : U SO


i m p o r t java . sql . * ;
c l a s s getOneRow {
p u b l i c s t a t i c v o i d main ( String args [ ] ) throws SQLException {
DriverManager . registerDriver ( new oracle . jdbc . driver . OracleDriver ( ) ) ;
Connection conn = DriverManager . getConnection ( " j d b c : o r a c l e : t h i n : @IP :PUERTO: o r c l " , "USER" , " PASSWORD" ) ;
Statement stmt = conn . createStatement ( ) ;
ResultSet rs = stmt . executeQuery ( "SELECT NOMBRE FROM NOMBRES WHERE ID=1 " ) ;
rs . next ( ) ;
String elNombre = rs . getString ( "NOMBRE" ) ;
System . out . println ( " E l Nombre con ID = 1 es " + elNombre ) ;
stmt . close ( ) ;
}
}
L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

20 / 86

SQL E MBEBIDO EN JAVA

P OSTGRE SQL Y JAVA

NDICE
1

BASE DE DATOS DE P RUEBA

SQL E MBEBIDO EN JAVA


Oracle SQL y Java
PostgreSQL y Java
SQL Server y Java
SQLite y Java

SQL E MBEBIDO EN C
PostgreSQL y C

SQL E MBEBIDO EN PHP ( POSTGRE SQL)


Configuracin previa
Conectar PHP y la base de datos
Ejemplo: Mostrar Tablas
Ejemplo: Registrar Usuario
Ejemplo: Validacin Usuario
Ejemplo: Actualizar Usuario
Ejemplo: Eliminar Usuario

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

21 / 86

SQL E MBEBIDO EN JAVA

P OSTGRE SQL Y JAVA

P OSTGRE SQL Y JAVA : C ONEXIN


package postgresql ;
i m p o r t java . sql . * ;
i m p o r t java . util . logging . Level ;
i m p o r t java . util . logging . Logger ;
/ / En e s t e paquete se encuentran una s e r i e de c l a s e s que p e r m i t e n t r a b a j a r con Bases de datos .
c l a s s dbAccess {
p u b l i c s t a t i c v o i d main ( String args [ ] ) throws SQLException
{
String database = " Prueba " ;
String user = " p o s t g r e s " ;
String pass = " 123456 " ;
DriverManager . registerDriver ( new org . postgresql . Driver ( ) ) ;
Connection conn = DriverManager . getConnection ( " j d b c : p o s t g r e s q l : / / 1 2 7 . 0 . 0 . 1 : 5 4 3 2 / " +database+ " ? " , user , pass ) ;
System . out . println ( "Me conecte : ) " ) ;
}
}

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

22 / 86

SQL E MBEBIDO EN JAVA

P OSTGRE SQL Y JAVA

P OSTGRE SQL Y JAVA : U SO


package postgresql ;
i m p o r t java . sql . * ;
c l a s s getOneRow {
p u b l i c s t a t i c v o i d main ( String args [ ] ) throws SQLException
{
String database = " Prueba " ;
String user = "USUARIO" ;
String pass = "PASSWORD" ;
DriverManager . registerDriver ( new org . postgresql . Driver ( ) ) ;
Connection conn = DriverManager . getConnection ( " j d b c : p o s t g r e s q l : / / 1 2 7 . 0 . 0 . 1 : 5 4 3 2 / " +database+ " ? " , user , pass ) ;
Statement stmt = conn . createStatement ( ) ;
ResultSet rs = stmt . executeQuery ( "SELECT * FROM nombres " ) ;
w h i l e ( rs . next ( ) ) {
String elNombre = rs . getString ( " nombre " ) ;
System . out . println ( " Se l l a m a " + elNombre ) ;
}
stmt . close ( ) ;
}
} / / end c l a s e getRows
L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

23 / 86

SQL E MBEBIDO EN JAVA

P OSTGRE SQL Y JAVA

C OMPILAR DESDE TERMINAL

javac cp postgresql . jar : . dbAccess . java


java cp postgresql . jar : . dbAccess

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

24 / 86

SQL E MBEBIDO EN JAVA

SQL S ERVER Y JAVA

NDICE
1

BASE DE DATOS DE P RUEBA

SQL E MBEBIDO EN JAVA


Oracle SQL y Java
PostgreSQL y Java
SQL Server y Java
SQLite y Java

SQL E MBEBIDO EN C
PostgreSQL y C

SQL E MBEBIDO EN PHP ( POSTGRE SQL)


Configuracin previa
Conectar PHP y la base de datos
Ejemplo: Mostrar Tablas
Ejemplo: Registrar Usuario
Ejemplo: Validacin Usuario
Ejemplo: Actualizar Usuario
Ejemplo: Eliminar Usuario

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

25 / 86

SQL E MBEBIDO EN JAVA

SQL S ERVER Y JAVA

SQL S ERVER Y JAVA : C ONEXIN


i m p o r t java . sql . * ;
c l a s s dbAccess {
p u b l i c s t a t i c v o i d main ( String args [ ] ) throws SQLException {
String database = "BASEdeDATOS" ;
String user = "USUARIO" ;
String pass = "PASSWORD" ;
DriverManager . registerDriver ( new com . microsoft . sqlserver . jdbc . SQLServerDriver ( ) ) ;
Connection conn = DriverManager . getConnection ( " j d b c : s q l s e r v e r : / / l o c a l h o s t ; instanceName=SQLEXPRESS; databaseName= " +database+ " ; user= " +user+ " ; password= " +pass+ " ; " ) ;
System . out . println ( "Me conecte : ) " ) ;
}
}
L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

26 / 86

SQL E MBEBIDO EN JAVA

SQL S ERVER Y JAVA

SQL S ERVER Y JAVA : U SO


i m p o r t java . sql . * ;
c l a s s getOneRow {
p u b l i c s t a t i c v o i d main ( String args [ ] ) throws SQLException {
String database = " Prueba1 " ;
String user = "USUARIO" ;
String pass = "PASSWORD" ;
DriverManager . registerDriver ( new com . microsoft . sqlserver . jdbc. SQLServerDriver ( ) ) ;
Connection conn = DriverManager . getConnection ( " j d b c : s q l s e r v e r : / / l o c a l h o s t ; instanceName=SQLEXPRESS; databaseName= " +database+ " ; user= " +user+ " ; password= " +pass+ " ; " ) ;
Statement stmt = conn . createStatement ( ) ;
ResultSet rs = stmt . executeQuery ( "SELECT * FROM nombres " ) ;
w h i l e ( rs . next ( ) ) {
String elNombre = rs . getString ( " nombre " ) ;
System . out . println ( " Se l l a m a " + elNombre ) ;
}
stmt . close ( ) ;
}
}

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

27 / 86

SQL E MBEBIDO EN JAVA

SQL ITE Y JAVA

NDICE
1

BASE DE DATOS DE P RUEBA

SQL E MBEBIDO EN JAVA


Oracle SQL y Java
PostgreSQL y Java
SQL Server y Java
SQLite y Java

SQL E MBEBIDO EN C
PostgreSQL y C

SQL E MBEBIDO EN PHP ( POSTGRE SQL)


Configuracin previa
Conectar PHP y la base de datos
Ejemplo: Mostrar Tablas
Ejemplo: Registrar Usuario
Ejemplo: Validacin Usuario
Ejemplo: Actualizar Usuario
Ejemplo: Eliminar Usuario

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

28 / 86

SQL E MBEBIDO EN JAVA

SQL ITE Y JAVA

SQL ITE Y JAVA : C ONEXIN


i m p o r t java . sql . * ;
c l a s s dbAccess {
p u b l i c s t a t i c v o i d main ( String args [ ] ) throws SQLException
{
String database = " BasedeDatos " ;
String user = "USUARIO" ;
String pass = "PASSWORD" ;
DriverManager . registerDriver ( new org . sqlite . JDBC ( ) ) ;
Connection conn = DriverManager . getConnection ( " j d b c : s q l i t e : " +database ) ;
System . out . println ( "Me conecte : ) " ) ;
}
}
L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

29 / 86

SQL E MBEBIDO EN JAVA

SQL ITE Y JAVA

SQL ITE Y JAVA : U SO


package sqlite ;
i m p o r t java . sql . * ;
c l a s s getOneRow {
p u b l i c s t a t i c v o i d main ( String args [ ] ) throws SQLException {
String database = " BasedeDatos " ;
String user = "USUARIO" ;
String pass = "PASSWORD" ;
DriverManager . registerDriver ( new org . sqlite . JDBC ( ) ) ;
Connection conn = DriverManager . getConnection ( " j d b c : s q l i t e : " +database ) ;
Statement stmt = conn . createStatement ( ) ;
ResultSet rs = stmt . executeQuery ( "SELECT * FROM nombres " ) ;
w h i l e ( rs . next ( ) ) {
String elNombre = rs . getString ( " nombre " ) ;
System . out . println ( " Se l l a m a " + elNombre ) ;
}
stmt . close ( ) ;
}
}
L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

30 / 86

SQL E MBEBIDO EN C

NDICE
1

BASE DE DATOS DE P RUEBA

SQL E MBEBIDO EN JAVA


Oracle SQL y Java
PostgreSQL y Java
SQL Server y Java
SQLite y Java

SQL E MBEBIDO EN C
PostgreSQL y C

SQL E MBEBIDO EN PHP ( POSTGRE SQL)


Configuracin previa
Conectar PHP y la base de datos
Ejemplo: Mostrar Tablas
Ejemplo: Registrar Usuario
Ejemplo: Validacin Usuario
Ejemplo: Actualizar Usuario
Ejemplo: Eliminar Usuario

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

31 / 86

SQL E MBEBIDO EN C

P OSTGRE SQL Y C

NDICE
1

BASE DE DATOS DE P RUEBA

SQL E MBEBIDO EN JAVA


Oracle SQL y Java
PostgreSQL y Java
SQL Server y Java
SQLite y Java

SQL E MBEBIDO EN C
PostgreSQL y C

SQL E MBEBIDO EN PHP ( POSTGRE SQL)


Configuracin previa
Conectar PHP y la base de datos
Ejemplo: Mostrar Tablas
Ejemplo: Registrar Usuario
Ejemplo: Validacin Usuario
Ejemplo: Actualizar Usuario
Ejemplo: Eliminar Usuario

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

32 / 86

SQL E MBEBIDO EN C

P OSTGRE SQL Y C

L IBRERIA Y VARIABLE

En el caso de C y PostgreSQL es necesario ubicar la librera libpq-fe.h


la cual se encuentra en la carpeta include del directorio de instalacin
de PostgreSQL
E JEMPLO (MAC)
# i n c l u d e " / L i b r a r y / PostgreSQL / 9 . 4 / i n c l u d e / l i b p q f e . h "

Para almacenar los resultados provenientes de la base de datos PostgreSQL, es necesario declarar variables que permitan esta accin. Para ello la libreria anterior tiene incluido el tipo PGresult.
PGresult * variable1 , * variabl2 ;

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

33 / 86

SQL E MBEBIDO EN C

P OSTGRE SQL Y C

C ONEXIN A LA BASE DE DATOS


La librera libpq-fe.h de PostgreSQL incluye un tipo de dato para almacenar la conexin a la base de datos. Es necesario tener declarada por
lo menos una variable de conexin.
D ECLARACIN
PGconn * conn ;

Utilizando la variable de conexin, establecemos la misma con la funcin PQsetdbLogin():


E JEMPLO
conn=PQsetdbLogin ( " IP " , " 5432 " , NULL , NULL , " BaseDeDatos " , " USUARIO" , "PASSWORD" ) ;

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

34 / 86

SQL E MBEBIDO EN C

P OSTGRE SQL Y C

OTRAS VARIABLES DEFINIDAS EN LIBPQ - FE . H

Para verificar el estado de la conexin podemos utilizar la funcin PQstatus() la cual retorna verdadero o falso dependiendo si la conexin se
realizo correctamente o no.
E STADO DE LA CONEXIN
PQstatus ( conn )

Si deseamos terminar la conexin con la base de datos, podemos utilizar la funcin PQfinish(), la cual cortara dicha conexin.
T ERMINAR LA CONEXIN
PQfinish ( conn ) ;

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

35 / 86

SQL E MBEBIDO EN C

P OSTGRE SQL Y C

E JEMPLO DE C ONEXIN
# i n c l u d e < s t d i o . h>
# i n c l u d e < s t d l i b . h>
# i n c l u d e < s t r i n g . h>
# i n c l u d e " / L i b r a r y / PostgreSQL / 9 . 4 / i n c l u d e / l i b p q f e . h "
# i n c l u d e < c t y p e . h>
# i n c l u d e <sys / t i m e . h>
/ / V a r i a b l e " conn " d e l Tipo Conexion PGconn
PGconn * conn ;
i n t main ( ) {
/ * * * * * * l o g i n a l a base de datos * * * * * * /
conn=PQsetdbLogin ( " l o c a l h o s t " , " 5432 " , NULL , NULL , " Prueba " , " p o s t g r e s " , " " );
printf ( " Conectando a l a BD\ n " ) ;
i f ( PQstatus ( conn ) ! = CONNECTION_BAD ) {
printf ( "DB conectada \ n " ) ;
PQfinish ( conn ) ;
fflush ( stdin ) ;
} else
printf ( " A l c o n e c t a r s e a l a BD\ n " ) ;
return 0;
}
L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

36 / 86

SQL E MBEBIDO EN C

P OSTGRE SQL Y C

E JEMPLO M ANEJO BASE DE DATOS


PGresult * elem , * elem1 ; / / v a r i a b l e r e s u l t a d o
char query [ 2 5 0 ] , * resevi=NULL , * res1=NULL ;
int i,j,k;
strcpy ( query , "SELECT * FROM nombres ; " ) ;
/ / obtengo l a c a n t i d a d de f i l a s ( t u p l a s ) y columnas ( campos )
elem=PQexec ( conn , query ) ;
printf ( " Consulta : % s \ n " , query ) ;
i n t tuplas = PQntuples ( elem ) ;
i n t campos = PQnfields ( elem ) ;
printf ( " t u p l a s : % i \ n campos : % i \ n " , tuplas , campos ) ;
/ / r e c o r r o l a t a b l a r e s u l t a n t e de l a c o n s u l t a y muestro sus r e s u l t a d o s
f o r ( j=0;j<tuplas ; j++) {
f o r ( k=0;k<campos ; k++) {
res1=PQgetvalue ( elem , j , k ) ;
elem1=PQexec ( conn , query ) ;
printf ( " % s \ n " , res1 ) ;
} }
L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

37 / 86

SQL E MBEBIDO EN C

P OSTGRE SQL Y C

C OMPILAR DESDE TERMINAL

C OMPILAR EN L INUX
gcc dbaccess . c o EJECUTABLE I / usr / include / postgresql L / usr / include / postgresql lpq fnostackprotector
. / EJECUTABLE

C OMPILAR EN M AC
gcc dbaccess . c o EJECUTABLE I / Library / PostgreSQL / 9 . 4 / include / postgresql / L / Library / PostgreSQL / 9 . 4 / include / postgresql / lpq fnostackprotector
. / EJECUTABLE

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

38 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

NDICE
1

BASE DE DATOS DE P RUEBA

SQL E MBEBIDO EN JAVA


Oracle SQL y Java
PostgreSQL y Java
SQL Server y Java
SQLite y Java

SQL E MBEBIDO EN C
PostgreSQL y C

SQL E MBEBIDO EN PHP ( POSTGRE SQL)


Configuracin previa
Conectar PHP y la base de datos
Ejemplo: Mostrar Tablas
Ejemplo: Registrar Usuario
Ejemplo: Validacin Usuario
Ejemplo: Actualizar Usuario
Ejemplo: Eliminar Usuario

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

39 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

C ONFIGURACIN PREVIA

NDICE
1

BASE DE DATOS DE P RUEBA

SQL E MBEBIDO EN JAVA


Oracle SQL y Java
PostgreSQL y Java
SQL Server y Java
SQLite y Java

SQL E MBEBIDO EN C
PostgreSQL y C

SQL E MBEBIDO EN PHP ( POSTGRE SQL)


Configuracin previa
Conectar PHP y la base de datos
Ejemplo: Mostrar Tablas
Ejemplo: Registrar Usuario
Ejemplo: Validacin Usuario
Ejemplo: Actualizar Usuario
Ejemplo: Eliminar Usuario

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

40 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

C ONFIGURACIN PREVIA

API NATIVA EN P OSTGRE SQL


Para trabajar con la API nativa de PostgreSQL en PHP,
deberemos haber compilado el intrprete con soporte para este
SGBD, o bien disponer ya del binario de PHP precompilado con el
soporte incorporado.
En el caso de tenerlo que compilar, nicamente debemos indicar
como opcin --with-pgsql.
PSQL es el interprete de comandos de Postgres.
Posteriormente, o en el caso de que ya dispongamos del binario,
podemos validar que el soporte para PostgreSQL est incluido
correctamente en el intrprete con la ejecucin del siguiente
comando:
$ php i | grep PostgreSQL
PDO Driver f o r PostgreSQL => enabled
PostgreSQL ( libpq ) Version => 9 . 3 . 4
$
L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

41 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

C ONFIGURACIN PREVIA

C OMPRUEBA LA CONEXIN DE PHP CON


P OSTGRE SQL

Otra alternativa es probar grficamente por medio del navegador


si el modulo est activo y/o configurado.
Para eso debemos crear un archivo php con el siguiente cdigo y
ejecutarlo en el navegador.
C DIGO PGSQL . PHP
<?php
echo e x t e n s i o n _ l o a d e d ( ' p g s q l ' ) ;
?>

Si aparece una ventana en blanco es que falta instalar el modulo pgsql.


Este archivo debera mostrar un 1 si est funcionando correctamente.

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

42 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

C ONFIGURACIN PREVIA

C ONFIGURACIN A TENER EN CUENTA


PHP proporciona unos parmetros de configuracin que nos
permitirn controlar algunos aspectos del funcionamiento de las
conexiones con el SGBD, y las propias funciones de trabajo con
la base de datos.
En cuanto a los parmetros, debern situarse en el archivo
php.ini, o bien configurarse para nuestra aplicacin en concreto
desde el servidor web. Destacan los siguientes:
pgsql.allow_persistent: indica si vamos a permitir conexiones
persistentes a PostgreSQL. Los valores posibles son true o false.
pgsql.max_persistent: nmero mximo de conexiones
persistentes permitidas por proceso.
pgsql.max_links: nmero mximo de conexiones permitidas por
proceso, incluyendo las persistentes.
pgsql.auto_reset_persistent: detecta automticamente
conexiones persistentes cerradas y las elimina.
L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

43 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

C ONFIGURACIN PREVIA

I NSTALAR MODULO PGSQL EN D EBIAN /U BUNTU


L INUX

Instalar el siguiente paquete y luego reiniciar apache.


Despus probar nuevamente el archivo pgsql.php.
C OMO ROOT INSTALA EL SIGUIENTE PAQUETE
# aptg e t i n s t a l l php5p g s q l

L UEGO R EINICIAR A PACHE ( COMO ROOT )


# apache2ctl r e s t a r t
# / e t c / i n i t . d / apache2 r e s t a r t

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

44 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

C ONFIGURACIN PREVIA

I NSTALAR MODULO PGSQL EN W INDOWS

E N EL ARCHIVO DE CONFIGURACIN DE PHP PHP. INI DESCOMENTA


LAS SIGUIENTES LINEAS ( ELIMINAR EL ;)
extension=php_bz2.dll
extension=php_fileinfo.dll
extension=php_gd2.dll
extension=php_mysql.dll
extension=php_mysqli.dll
extension=php_pgsql.dll
extension=php_pdo_pgsql.dll
Luego reinicia apache.

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

45 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

C ONFIGURACIN PREVIA

I NSTALAR MODULO PGSQL EN W INDOWS

Si php_pgsql.dll y php_pdo_pgsql.dll no estn en la carpeta de instalacin de PHP, puedes bajar el archivo comprimido y aadir la ruta directa como por ejemplo: extension=C:/php/ext/php_pgsql.dll
o copiar los archivos a la carpeta de instalacin.
El directorio de instalacin de PHP si instalaron WAMPP debera
ser: C:\wamp\bin\php\php5.3.9\ext\ y dentro de el ubicar los
archivos.
Luego reinicia apache.

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

46 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

C ONFIGURACIN PREVIA

I NSTALAR MODULO PGSQL EN MAC


Probando PSQL en la terminal
$ psql

Si el comando anterior entrega un mensaje de error referente a que el


comando no existe, lo que tenemos que hacer es lo siguiente:
$ which psql

Si el comando anterior arroja algo como /usr/bin/psql Esta apuntando al path de instalacin por defecto del gestor y no ha donde acabamos de instalarlo. Para resolver ese problema tenemos que editar
nuestro archivo bash_profile.
$ nano ~ / bash_profile

y aadimos la siguiente linea:


e x p o r t PATH = / Library / PostgreSQL / 9 . 4 / bin : $PATH
L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

47 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

C ONFIGURACIN PREVIA

I NSTALAR MODULO PGSQL EN MAC


Si al abrir el archivo notas que ya tienes una entrada con export, lo
nico que tienes que hacer es agregar /Library/PostgreSQL/9.4/bin
en alguna parte antes de $PATH, teniendo el cuidado de separar el
path de otros usando :, al final deberas de tener algo como:
e x p o r t PATH = / opt / local / bin : / opt / local / sbin : / Library / PostgreSQL / 9 . 4 / bin : $PATH
9.4 debe ser remplazado por la versin de postgreSQL que acabas de instalar

Escribimos una vez ms en la consola


$ source ~ / . bash_profile

Por ltimo probamos que este funcionando:


$ which psql

Y si todo esta bien debemos debemos de obtener algo como


/ Library / PostgreSQL / 9 . 4 / bin / psql
L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

48 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

C ONECTAR PHP Y LA BASE DE DATOS

NDICE
1

BASE DE DATOS DE P RUEBA

SQL E MBEBIDO EN JAVA


Oracle SQL y Java
PostgreSQL y Java
SQL Server y Java
SQLite y Java

SQL E MBEBIDO EN C
PostgreSQL y C

SQL E MBEBIDO EN PHP ( POSTGRE SQL)


Configuracin previa
Conectar PHP y la base de datos
Ejemplo: Mostrar Tablas
Ejemplo: Registrar Usuario
Ejemplo: Validacin Usuario
Ejemplo: Actualizar Usuario
Ejemplo: Eliminar Usuario

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

49 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

C ONECTAR PHP Y LA BASE DE DATOS

E STABLECIENDO LA C ONEXIN
Por lo que respecta a la utilizacin de la API para la conexin y
consulta de bases de datos, empezaremos con un ejemplo:
CONEXION . PHP

<?php
/ / Datos para l a conexion
/ / Conectarse a Postgres
$link = pg_connect ( " h o s t = l o c a l h o s t p o r t =5432 password=123456 user= p o s t g r e s dbname=Prueba " ) ;
if

( ! $link ) {
d i e ( ' E r r o r a l c o n e c t a r s e a PostgreSQL :
pg_ErrorMessage ( $link ) ) ;

' . -

}
else
echo " E x i t o ! " ;
?>
L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

50 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

C ONECTAR PHP Y LA BASE DE DATOS

E STABLECIENDO LA C ONEXIN
En las lneas anteriores, se establece la conexin a la base de datos
seleccionada con que se va a trabajar y comprobamos que se ha
realizado correctamente.
El cdigo es bastante explcito y la mayora de errores al respecto
suelen deberse a una mala configuracin de los permisos del usuario
sobre la base de datos con la que debe trabajar.
Conviene estar muy atento, sobre todo a las direcciones de origen de la
conexin, ya que, aunque podemos usar localhost como nombre de
equipo, si el intrprete y el SGBD estn en el mismo servidor, suele
ocurrir que PHP resuelve localhost al nombre real del equipo e intenta
conectarse con esta identificacin.
As pues, debemos examinar cuidadosamente los archivos de registro
de PostgreSQL y los usuarios y privilegios del mismo si falla la conexin.
Para establecer una conexin persistente, debemos utilizar la funcin
pg_pconnect() con los mismos parmetros de pg_connect().
L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

51 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

C ONECTAR PHP Y LA BASE DE DATOS

PARMETROS DE C ONSULTAS

MUESTRADB . PHP
<?php
$consulta = " s e l e c t * from nombres " ;
$ejecquery = pg_query ( $consulta , $link ) or d i e ( ' Consulta e r r &oacute ; nea : ' . pg_last_error ( ) ) ;
?>

La funcin pg_query() se utiliza para lanzar la consulta a la base


de datos.
El resultado de la consulta se almacena an $ejecquery.

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

52 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

C ONECTAR PHP Y LA BASE DE DATOS

PARMETROS DE C ONSULTAS
Para comprobar errores, la API de PostgreSQL distingue entre un error
de conexin, y errores sobre los recursos devueltos. En el primer caso,
deberemos usar pg_connection_status(), mientras que en el
segundo podemos optar por pg_last_error() o bien
pg_result_error($recurso) para obtener el mensaje de error que
pueda haber devuelto un recurso en concreto.
La funcin pg_query() puede devolver los siguientes resultados:
FALSE si ha habido un error.
Una referencia a una estructura si la sentencia ha tenido xito.

La funcin pg_affected_rows($recurso) nos permite conocer el


nmero de filas que se han visto afectadas por sentencias de
actualizacin, borrado o insercin. Esta funcin deber recibir como
parmetro el recurso devuelto por la funcin pg_query().
La funcin pg_num_rows($recurso) nos permite conocer el nmero
de filas devuelto por sentencias de consulta.
L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

53 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

C ONECTAR PHP Y LA BASE DE DATOS

PARMETROS DE C ONSULTAS
Una vez obtenido el recurso a partir de los resultados de la consulta,
PHP proporciona multitud de formas de iterar sobre sus resultados o
de acceder a uno de ellos directamente. Comentamos las ms destacadas:
$fila=pg_fetch_array($recurso,<tipo_de_array>)
Esta funcin va iterando sobre el recurso, devolviendo una fila
cada vez, hasta que no quedan ms filas y devuelve FALSE. La
forma del array devuelto, depender del parmetro
<tipo_de_array> que puede tomar estos valores:
PG_NUM: devuelve un array con ndices numricos para los
campos. Es decir, en $fila[0] tendremos el primer campo del
SELECT, en $fila[1], el segundo, etc.
PG_ASSOC: devuelve un array asociativo donde los ndices son los
nombres de campo o alias que hayamos indicado en la sentencia
SQL.
PG_BOTH: devuelve un array con los dos mtodos de acceso.
L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

54 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

C ONECTAR PHP Y LA BASE DE DATOS

PARMETROS DE C ONSULTAS
MUESTRADB . PHP
<?php
$consulta = " s e l e c t * from nombres " ;
$ejecquery = pg_query ( $consulta , $link ) or d i e ( ' Consulta e r r &oacute ; nea : ' . pg_last_error ( ) ) ;
?>
<table border= ' 1 ' >
<tr>
<td>ID < / td><td>Nombre < / td>
</tr>
<?php
w h i l e ( $reg = pg_fetch_assoc ( $ejecquery ) ) {
echo " < t r >
<td > " . $reg [ ' i d ' ] . " </ td >
<td > " . $reg [ ' nombre ' ] . " </ td >
</ t r > " ;
}
?>
</table>

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

55 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

C ONECTAR PHP Y LA BASE DE DATOS

PARMETROS DE C ONSULTAS
MUESTRADB . PHP

<?php
$consulta = " s e l e c t nombre from nombres " ;
$ejecquery = pg_query ( $consulta , $link ) or d i e ( ' Consulta e r r &oacute ; nea : ' . pg_last_error ( ) ) ;
?>
<table border= ' 1 ' >
<?php
w h i l e ( $line = p g _ f e t c h _ a r r a y ( $ejecquery , PGSQL_BOTH)){
echo " \ t < t r > \ n " ;
f o r ( $i=0;$i< s i z e o f ( $line ) ; $i++) {
echo " \ t \ t <td > $ l i n e [ $ i ] < / td > \ n " ;
}
echo " <td >Nombre : $ l i n e [ ' nombre ' ] < / td > " ;
echo " \ t < / t r > \ n " ;
}
?> </table>
L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

56 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

C ONECTAR PHP Y LA BASE DE DATOS

PARMETROS DE C ONSULTAS
$objeto=pg_fetch_object($recurso)
Esta funcin va iterando sobre los resultados, devolviendo un
objeto cada vez, de forma que el acceso a los datos de cada
campo se realiza por medio de las propiedades del objeto. Al
igual que en el array asociativo, hay que vigilar con los nombres
de los campos en consulta, evitando que devuelva campos con el
mismo nombre fruto de combinaciones de varias tablas, ya que
solo podremos acceder al ltimo de ellos.
<?php
$consulta = " s e l e c t i d , nombre from nombres " ;
$ejecquery = pg_query ( $consulta , $link ) or d i e ( ' Consulta e r r &oacute ; nea : ' . pg_last_error ( ) ) ;
?>
<table border= ' 1 ' >
<?php
w h i l e ( $line = p g _ f e t c h _ a r r a y ( $ejecquery , PGSQL_BOTH ) ) {
echo " \ t < t r > \ n " ;
echo " <td >ID : " . $object>id . " </ td > " ;
echo " <td >Nombre : " . $object>nombre . " </ td > " ;
echo " \ t < / t r > \ n " ;
}
?>
</table>
L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

57 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

C ONECTAR PHP Y LA BASE DE DATOS

PARMETROS DE C ONSULTAS

Podemos pasar a la funcin pg_fetch_object() un segundo


parmetro para indicar la fila concreta que queremos obtener:
$resultado = pg_fetch_all($recurso)
Esta funcin devuelve toda la hoja de datos correspondiente a
$recurso; es decir, una array con todas las filas y columnas que
forman el resultado de la consulta.

$exito=pg_result_seek($recurso,$fila)
Esta funcin permite mover el puntero dentro de la hoja de
resultados representada por $recurso hasta la fila que
deseemos. Deben tomarse las mismas consideraciones que en la
funcin mysql_data_seek().

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

58 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

C ONECTAR PHP Y LA BASE DE DATOS

OTROS PARMETROS DE C ONSULTAS


Al igual que en MySQL, PHP tambin proporciona funciones
especficas para trabajar con algunos aspectos particulares de
PostgreSQL. Al tener ste ms funcionalidad que se aleja de lo
estndar debido a su soporte a objetos, estas funciones cobrarn
ms importancia. A continuacin comentamos las ms
destacadas:
pg_field_name, pg_field_num, pg_field_size,
pg_field_type: estas funciones proporcionan informacin sobre
los campos que integran una consulta. Sus nombres son
suficientemente explcitos acerca de su cometido.
pg_last_oid: esta funcin nos de vuelve el OID obtenido por la
insercin de una tupla si el recurso que recibe como parmetro es
el correspondiente a una sentencia INSERT. En caso contrario
devuelve FALSE.
pg_lo_create, pg_lo_open, pg_lo_export, pg_lo_import,
pg_lo_read, pg_lo_write: estas funciones (entre otras)
facilitan el trabajo con objetos grandes (LOB) en PostgreSQL.
L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

59 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

C ONECTAR PHP Y LA BASE DE DATOS

Las funciones pg_lo_import y pg_lo_export pueden tomar


archivos como parmetros, facilitando la insercin de objetos
binarios en la base de datos.
E JEMPLO
<?php
$database = pg_connect ( " dbname= j a c a r t a " ) ;
pg_query ( $database , " begin " ) ;
$oid = pg_lo_create ( $database ) ;
echo " $ o i d \ n " ;
$handle = pg_lo_open ( $database , $oid , "w" ) ;
echo " $handle \ n " ;
p g _ l o _ w r i t e ( $handle , " l a r g e o b j e c t data " ) ;
p g _ l o _ c l o s e ( $handle ) ;
pg_query ( $database , " commit " ) ;
?>
L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

60 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

C ONECTAR PHP Y LA BASE DE DATOS

C ERRAR LA C ONEXIN
Finalmente, comentaremos las funciones de liberacin y desconexin.
En el primer caso, PHP realiza un excelente trabajo liberando recursos
de memoria cuando la ejecucin en curso ya no se van a utilizar ms.
Aun as, si la consulta devuelve una hoja de datos muy grande, puede
ser conveniente liberar el recurso cuando no lo necesitemos.
Por lo que respecta al cierre de la conexin, tampoco suele ser necesario, ya que PHP cierra todas las conexiones al finalizar la ejecucin y, adems, el cierre siempre est condicionado a la configuracin de las conexiones persistentes. Tal como ya hemos comentado,
si activamos las conexiones persistentes (o bien hemos conectado con
pg_pconnect), esta funcin no tiene ningn efecto y, en todo caso,
ser PHP quien decida cundo se va a cerrar cada conexin.

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

61 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

C ONECTAR PHP Y LA BASE DE DATOS

A RCHIVO CONEXION . PHP

Vamos a crear el archivo PHP que realizar la conexin con PostgreSQL.


CONEXION . PHP
<?php
/ / Datos para l a conexion
/ / Conectarse a Postgres
$link = pg_connect ( " h o s t = l o c a l h o s t p o r t =5432 password=123456 user=p o s t g r e s dbname=Prueba " ) ;
i f ( ! $link )
d i e ( ' E r r o r a l c o n e c t a r s e a PostgreSQL :
e l s e echo " E x i t o ! " ; / / o m i t i r e l e l s e
?>

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

' . pg_ErrorMessage ( $link ) ) ;

M AY 2015

62 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

C ONECTAR PHP Y LA BASE DE DATOS

A RCHIVO INDEX . PHP (H EAD )

Toda pagina que utilice la base de datos debe tener en el Head el include del archivo de conexin.
< !DOCTYPE h t m l >
<html>
<head>
< t i t l e >Prueba PostgreSQL< / t i t l e >
<?php
i n c l u d e _ o n c e ( " conexion . php " ) ;
?>
< / head>

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

63 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

E JEMPLO : M OSTRAR TABLAS

NDICE
1

BASE DE DATOS DE P RUEBA

SQL E MBEBIDO EN JAVA


Oracle SQL y Java
PostgreSQL y Java
SQL Server y Java
SQLite y Java

SQL E MBEBIDO EN C
PostgreSQL y C

SQL E MBEBIDO EN PHP ( POSTGRE SQL)


Configuracin previa
Conectar PHP y la base de datos
Ejemplo: Mostrar Tablas
Ejemplo: Registrar Usuario
Ejemplo: Validacin Usuario
Ejemplo: Actualizar Usuario
Ejemplo: Eliminar Usuario

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

64 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

E JEMPLO : M OSTRAR TABLAS

A RCHIVO INDEX . PHP (B ODY )


<body>
<?php
$consulta = " s e l e c t * from nombres " ;
$ejecquery = pg_query ( $link , $consulta ) ;
?>
<table border= ' 1 ' >
<tr>
<td>ID < / td><td>Nombre < / td>
</tr>
<?php
w h i l e ( $reg = pg_fetch_assoc ( $ejecquery ) ) {
echo " < t r >
<td > " . $reg [ ' i d ' ] . " </ td >
<td > " . $reg [ ' nombre ' ] . " </ td >
</ t r > " ;
}
?>
</table>
</body>
</html>

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

65 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

E JEMPLO : M OSTRAR TABLAS

R ESULTADO C ONEXIN PHP Y P OSTGRE SQL

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

66 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

E JEMPLO : R EGISTRAR U SUARIO

NDICE
1

BASE DE DATOS DE P RUEBA

SQL E MBEBIDO EN JAVA


Oracle SQL y Java
PostgreSQL y Java
SQL Server y Java
SQLite y Java

SQL E MBEBIDO EN C
PostgreSQL y C

SQL E MBEBIDO EN PHP ( POSTGRE SQL)


Configuracin previa
Conectar PHP y la base de datos
Ejemplo: Mostrar Tablas
Ejemplo: Registrar Usuario
Ejemplo: Validacin Usuario
Ejemplo: Actualizar Usuario
Ejemplo: Eliminar Usuario

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

67 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

E JEMPLO : R EGISTRAR U SUARIO

A RCHIVO INDEX . PHP (B ODY )


<body>
<td><h4><div align= " Center " >Iniciar Sesion : < / div> </h4>
<div align= " c e n t e r " ><form method= " p o s t " action= " muestradb . php " >
<table>
<tr>
<td>Usuario : < / td>
<td><input type= " t e x t " name= " user " value= " " required> </td>
</tr><tr>
<td>Contrase&ntilde ; a : < / td>
<td><input type= " password " name= " c o n t r a " value= " " required> </td>
</tr><tr>
<td>Repita Contrase&ntilde ; a : < / td>
<td><input type= " password " name= " r c o n t r a " value= " " required> </td>
</tr>
</table>
<input type= " submit " name= " E n t r a r " value= " R e g i s t r a r " > </div>
</td><td>
</td> </tr>
</table> </div>
</form>
</body>
</html>
L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

68 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

E JEMPLO : R EGISTRAR U SUARIO

A RCHIVO INDEX . PHP (R ESULTADO )

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

69 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

E JEMPLO : R EGISTRAR U SUARIO

A RCHIVO M UESTRADB . PHP (B ODY )


<?php
$user = $_POST [ ' user ' ] ;
$pass = $_POST [ ' c o n t r a ' ] ;
$rpass = $_POST [ ' r c o n t r a ' ] ;
i f ( $pass ! = $rpass )
d i e ( ' <p>Las c o n t r a e& n t i l d e ; as deben s e r i g u a l e s < / p> ' ) ;
$consulta = " INSERT INTO u s u a r i o s ( nombre , c l a v e ) VALUES ( ' $user ' , md5 ( ' $pass ' ) ) " ;
echo " <p> La c o n s u l t a es : " . $consulta . " </p> " ;
/ / mostramos l a t a b l a con l o s u s u a r i o s ( super seguro : p )
$ejecquery = pg_query ( $link , $consulta ) or d i e ( ' I n s e r c i &oacute ; n f a l l i d a ' ) ;
$consulta = "SELECT n . nombre , n . c l a v e FROM u s u a r i o s n " ;
/ / echo $ c o n s u l t a ;
$ejecquery = pg_query ( $link , $consulta ) or d i e ( ' Consulta f a l l i d a ' ) ;
?>
<p>La tabla luego de insertar al nuevo usuario : < / p>
<table border= ' 1 ' > <tr>
<td>Usuario < / td><td>Contrase&ntilde ; a < / td> </tr>
<?php / / I m p r i m i r l o s r e s u l t a d o s en HTML
w h i l e ( $reg = pg_fetch_assoc ( $ejecquery ) ) {
echo " < t r ><td > " . $reg [ ' nombre ' ] . " </ td >
<td > " . $reg [ ' c l a v e ' ] . " </ td > </ t r > " ;
}
?>
</table>

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

70 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

E JEMPLO : R EGISTRAR U SUARIO

R ESULTADO R EGISTRAR U SUARIO

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

71 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

E JEMPLO : VALIDACIN U SUARIO

NDICE
1

BASE DE DATOS DE P RUEBA

SQL E MBEBIDO EN JAVA


Oracle SQL y Java
PostgreSQL y Java
SQL Server y Java
SQLite y Java

SQL E MBEBIDO EN C
PostgreSQL y C

SQL E MBEBIDO EN PHP ( POSTGRE SQL)


Configuracin previa
Conectar PHP y la base de datos
Ejemplo: Mostrar Tablas
Ejemplo: Registrar Usuario
Ejemplo: Validacin Usuario
Ejemplo: Actualizar Usuario
Ejemplo: Eliminar Usuario

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

72 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

E JEMPLO : VALIDACIN U SUARIO

A RCHIVO INDEX . PHP (B ODY )


<body>
< t d ><h4>< d i v a l i g n = " Center " >Iniciar Sesion : < / d i v >< / h4>
< d i v a l i g n = " c e n t e r " ><form method= " p o s t " a c t i o n = " muestradb . php " >
<table>
< t r >< t d >Usuario : < / t d >
< t d >< i n p u t t y p e = "TEXT" name= " user " v a l u e = " " >< / t d >< / t r ><tr>
< t d >Contrase&ntilde ; a : < / t d >
< t d >< i n p u t t y p e = " password " name= " c o n t r a " v a l u e = " " >< / t d ></ tr>
</ table>
< i n p u t t y p e = " submit " name= " E n t r a r " v a l u e = " E n t r a r " >< / d i v >
< / t d >< t d >< / t d >< / t r >
< / t a b l e >< / d i v >< / form>
< / body>
< / html>
L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

73 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

E JEMPLO : VALIDACIN U SUARIO

A RCHIVO INDEX . PHP (R ESULTADO )

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

74 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

E JEMPLO : VALIDACIN U SUARIO

A RCHIVO M UESTRADB . PHP (B ODY )


<?php
$user = $_POST [ ' user ' ] ;
$pass = $_POST [ ' c o n t r a ' ] ;
$cmd = "SELECT * FROM u s u a r i o s n WHERE ( n . nombre = ' $user ' and n . c l a v e = md5 ( ' $pass ' ) ) " ;
$result = pg_query ( $link , $cmd ) ;
$rows = pg_numrows ( $result ) ;
i f ( $rows>0) {
/ / a q u i llamamos a l a pagina que deseemos m o s t r a r s i e l u s u a r i o existe
?>
<script language= " J a v a S c r i p t " >
top . location . href= " page1 . php " ; < / script>
<?php }
else {
echo " Usuario y / o Password INCORRECTA( S ) " ;
exit ;
}
?>

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

75 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

E JEMPLO : VALIDACIN U SUARIO

R ESULTADO VALIDAR U SUARIO

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

76 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

E JEMPLO : ACTUALIZAR U SUARIO

NDICE
1

BASE DE DATOS DE P RUEBA

SQL E MBEBIDO EN JAVA


Oracle SQL y Java
PostgreSQL y Java
SQL Server y Java
SQLite y Java

SQL E MBEBIDO EN C
PostgreSQL y C

SQL E MBEBIDO EN PHP ( POSTGRE SQL)


Configuracin previa
Conectar PHP y la base de datos
Ejemplo: Mostrar Tablas
Ejemplo: Registrar Usuario
Ejemplo: Validacin Usuario
Ejemplo: Actualizar Usuario
Ejemplo: Eliminar Usuario

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

77 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

E JEMPLO : ACTUALIZAR U SUARIO

A RCHIVO INDEX . PHP (B ODY )


<body>
< t d ><h4>< d i v a l i g n = " Center " >Iniciar Sesi&oacute ; n : < / d i v >< / h4>
< d i v a l i g n = " c e n t e r " ><form method= " p o s t " a c t i o n = " muestradb . php " >
< t a b l e >< t r >
< t d >Usuario : < / t d >
< t d >< i n p u t t y p e = " t e x t " name= " user " v a l u e = " " r e q u i r e d >< / t d >
< / t r >< t r >
< t d >Contrase&ntilde ; a Actual : < / t d >
< t d >< i n p u t t y p e = " password " name= " c o n t r a " v a l u e = " " r e q u i r e d >< / t d >
< / t r >< t r >
< t d >Nueva Contrase&ntilde ; a : < / t d >
< t d >< i n p u t t y p e = " password " name= " updt " v a l u e = " " r e q u i r e d >< / t d >
< / t r >< / t a b l e >
< i n p u t t y p e = " submit " name= " E n t r a r " v a l u e = " A c t u a l i z a r " >< / d i v >
< / t d >< t d >< / t d >
< / t r >< / t a b l e >< / d i v >< / form>
< / body>
< / html>

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

78 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

E JEMPLO : ACTUALIZAR U SUARIO

A RCHIVO INDEX . PHP (R ESULTADO )

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

79 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

E JEMPLO : ACTUALIZAR U SUARIO

A RCHIVO M UESTRADB . PHP (B ODY )


<?php
$user = $_POST [ ' user ' ] ;
$pass = $_POST [ ' c o n t r a ' ] ;
$nueva = $_POST [ ' updt ' ] ;
i f ( $pass == $nueva )
d i e ( ' <p>Las c o n t r a e& n t i l d e ; as no deben s e r i g u a l e s < / p> ' ) ;
$consulta = "UPDATE u s u a r i o s SET c l a v e =md5 ( ' $nueva ' ) WHERE c l a v e =md5 ( ' $pass ' ) " ;
echo " <p> La c o n s u l t a es : " . $consulta . " </p> " ;
/ / mostramos l a t a b l a con l o s u s u a r i o s ( super seguro : p )
$ejecquery = pg_query ( $link , $consulta ) or d i e ( ' A c t u a l i z a c i &oacute ; nfallida ' ) ;
$consulta = "SELECT n . nombre , n . c l a v e FROM u s u a r i o s n " ;
/ / echo $ c o n s u l t a ;
$ejecquery = pg_query ( $consulta ) or d i e ( ' Consulta f a l l i d a ' ) ;
?>
<p>La tabla luego de actualizar al usuario : < / p>
<table border= ' 1 ' >
<tr><td>Usuario < / td><td>Contrase&ntilde ; a < / td> </tr>
<?php / / I m p r i m i r l o s r e s u l t a d o s en HTML
w h i l e ( $reg = pg_fetch_assoc ( $ejecquery ) ) {
echo " < t r > <td > " . $reg [ ' nombre ' ] . " </ td >
<td > " . $reg [ ' c l a v e ' ] . " </ td > </ t r > " ;
} ?> </table>
L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

80 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

E JEMPLO : ACTUALIZAR U SUARIO

R ESULTADO ACTUALIZAR U SUARIO

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

81 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

E JEMPLO : E LIMINAR U SUARIO

NDICE
1

BASE DE DATOS DE P RUEBA

SQL E MBEBIDO EN JAVA


Oracle SQL y Java
PostgreSQL y Java
SQL Server y Java
SQLite y Java

SQL E MBEBIDO EN C
PostgreSQL y C

SQL E MBEBIDO EN PHP ( POSTGRE SQL)


Configuracin previa
Conectar PHP y la base de datos
Ejemplo: Mostrar Tablas
Ejemplo: Registrar Usuario
Ejemplo: Validacin Usuario
Ejemplo: Actualizar Usuario
Ejemplo: Eliminar Usuario

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

82 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

E JEMPLO : E LIMINAR U SUARIO

A RCHIVO INDEX . PHP (B ODY )


< t d ><h4>< d i v a l i g n = " Center " >Iniciar Sesi&oacute ; n : < / d i v >< / h4>
< d i v a l i g n = " c e n t e r " ><form method= " p o s t " a c t i o n = " muestradb . php " >
< t a b l e >< t r >< t d >Usuario : < / t d >< t d >
< s e l e c t name= " u s u a r i o " >
< o p t i o n >< / o p t i o n >
<?php
$ c o n s u l t a = "SELECT n . nombre FROM u s u a r i o s n " ;
$ e j e c q u e r y = pg_query ( $ l i n k , $ c o n s u l t a ) o r d i e ( ' Consulta fallida : ') ;
?>
<?php / / I m p r i m i r l o s r e s u l t a d o s en HTML
while ( $ l i n e = pg_fetch_array ( $ejecquery ) ) {
f o r e a c h ( $ l i n e as $ c o l _ v a l u e )
echo " < o p t i o n > " . $ c o l _ v a l u e . " </ o p t i o n > " ; }
?>
</ select>
< / t d >< / t r >< t r >
< t d >Contrase&ntilde ; a : < / t d >
< t d >< i n p u t t y p e = " password " name= " c o n t r a " v a l u e = " " r e q u i r e d >< / t d >
< / t r >< / t a b l e >
< i n p u t t y p e = " submit " name= " E n t r a r " v a l u e = " E l i m i n a r " >< / d i v >
< / t d >< t d >< / t d >< / t r >< / t a b l e >< / d i v >< / form>
L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

83 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

E JEMPLO : E LIMINAR U SUARIO

A RCHIVO INDEX . PHP (R ESULTADO )

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

84 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

E JEMPLO : E LIMINAR U SUARIO

A RCHIVO M UESTRADB . PHP (B ODY )


<?php
$user = $_POST [ ' u s u a r i o ' ] ;
$pass = $_POST [ ' c o n t r a ' ] ;
$consulta = "DELETE FROM u s u a r i o s WHERE ( nombre = ' $user ' AND c l a v e =md5 ( ' $pass ' ) ) " ;
echo " <p> La c o n s u l t a es : " . $consulta . " </p> " ;
/ / mostramos l a t a b l a con l o s u s u a r i o s ( super seguro : p )
$ejecquery = pg_query ( $link , $consulta ) or d i e ( ' E l i m i n a c i &oacute ; n fallida ' ) ;
$consulta = "SELECT n . nombre , n . c l a v e FROM u s u a r i o s n " ;
$ejecquery = pg_query ( $link , $consulta ) or d i e ( ' Consulta f a l l i d a ' ) ;
?>
<p>La tabla luego de eliminar al usuario : < / p>
<table border= ' 1 ' >
<tr><td>Usuario < / td><td>Contrase&ntilde ; a < / td> </tr>
<?php / / I m p r i m i r l o s r e s u l t a d o s en HTML
w h i l e ( $reg = pg_fetch_assoc ( $ejecquery ) ) {
echo " < t r ><td > " . $reg [ ' nombre ' ] . " </ td >
<td > " . $reg [ ' c l a v e ' ] . " </ td > </ t r > " ;
}
?>
</table>
L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

85 / 86

SQL E MBEBIDO EN PHP ( POSTGRE SQL)

E JEMPLO : E LIMINAR U SUARIO

R ESULTADO E LIMINAR U SUARIO

L UIS E MILIO C ABRERA C ROT (UBB)

BD1

M AY 2015

86 / 86

Вам также может понравиться