BASE DE DATOS
Luis Emilio Cabrera Crot
[email protected]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 ó ; 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 ó ; 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 ó ; 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 ó ; 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ñ ; a : < / td>
<td><input type= " password " name= " c o n t r a " value= " " required> </td>
</tr><tr>
<td>Repita Contraseñ ; 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 ó ; 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ñ ; 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ñ ; 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ó ; 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ñ ; 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ñ ; 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 ó ; 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ñ ; 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ó ; 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ñ ; 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 ó ; 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ñ ; 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