ARQUITECTURA CLIENTE SERVIDOR (L1) REQUERIMIENTO CLIENTE WEB SERVIDOR WEB RESPUESTA
ARQUITECTURA WEB CON PHP + PostgreSQL (L1) 1 2 3 CLIENTE WEB SERVIDOR WEB MOTOR PHP SERVIDOR PostgreSQL 6 5 4
CONFIGURANDO USUARIOS PARA WEB (L2) PROGRAMÁTICAMENTE A TRAVÉS DE COMANDOS GRANT Y REVOKE PERMISOLOGÍA DIRECTA EN PostgreSQL COMANDO DE CONEXIÓN CON USUARIO, PASSWORD Y BASE DE DATOS
COMANDOS GRANT Y REVOKE (L2) GRANT privilegios [columnas] ON elemento TO usuario [WITH GRANT OPTION] REVOKE privilegios [(columnas)] ON elemento FROM usuario
TIPOS DE PRIVILEGIOS (L2) SELECT (TABLAS Y COLUMNAS) INSERT (TABLAS Y COLUMNAS) UPDATE (TABLAS Y COLUMNAS) DELETE (TABLAS) INDEX (TABLAS) ALTER (TABLAS) CREATE (BASES DE DATOS Y TABLAS) DROP (BASES DE DATOS Y TABLAS)
EJEMPLO DE GRANT Y REVOKE (L2) GRANT ALL ON * TO ADMIN WITH GRANT OPTION REVOKE ALL ON * FROM ADMIN
UN USUARIO WEB (L2) PRIVILEGIOS DE SELECT, INSERT, UPDATE, DELETE SOBRE UNA BASE DE DATOS GRANT SELECT, INSERT, UPDATE, DELETE ON SISTORDCOMPRA.* TO E022 NOTA: En PHP+PostgreSQL se maneja una Base de Datos con varios esquemas. Se asume en el ejemplo anterior SISTORDCOMPRA es un esquema
OPERACIONES DE BASES DE DATOS EN WEB (L3) INSERTANDO, INSERT COMMAND INSERT INTO tabla [(cola, colb, )] VALUES (vala, valb, ) SELECCIONANDO, SELECT COMMAND ACTUALIZANDO, UPDATE COMMAND ELIMINANDO, DELETE COMMAND
CONSULTA BASES DE DATOS EN WEB (L4) PROCESAR LOS DATOS DE LA CONSULTA (EVITAR ERRORES U OPERACIONES SOSPECHOSAS) CONEXIÓN BASE DE DATOS EJECUCIÓN COMANDOS ( QUERIES ) PROCESAMIENTO DEL RESULTADO (ESTILO CURSOR) MOSTRAR LOS RESULTADOS DE LA CONSULTA AL USUARIO
PROCESAR DATOS DE CONSULTA (L4) trim($dato); // ELIMINA LOS BLANCOS ENVÍANDO UN STRING A LA BASES DE DATOS $Dato = addslashes($dato); // caracteres espaciales RECIBIENDONDO UN STRING DE LA BASES DE DATOS $Dato = stripslashes($dato); // removiendo carateres // especiales htmlspecialchars()
CONEXIONES NO PERSISTENTES (L5) pg_connect -- Abre una conexión a un servidor PostgreSQL Descripción int pg_connect ( string host, string port, string options, string tty, string dbname ) o $con = pg_connect("dbname=gala port=5432"); Retorna: Un identificador de conexión positivo si tiene exito, o FALSE si se produce un error.
CONEXIONES PERSISTENTES (L5) pg_pconnect -- Abre una conexión persistente al servidor PostgreSQL Descripción int pg_connect ( string host, string port, string options, string tty, string dbname ) Retorna un identificador de enlace persistente, o FALSE si se produce un error. Si se trata de realizar pg_pconnect a una conexión ya Abierta, no la vuelve a abrir sino se conecta a la misma.
CERRADO DE CONEXIONES (L5) EVITAR SOBRECARGA EN LA BASE DE DATOS pg_close -- cierra el enlace con PostgreSQL Descripción bool pg_close ( [int identificador_de_enlace] )
SELECCIONANDO BASE DE DATOS A TRABAJAR (L6) EN POSTGRESQL LAS CONEXIONES SE EFECTÚAN CON BASES DE DATOS Y NO CON SERVIDOR POR LO GENERAL SE DISEÑA UNA BASE DE DATOS CON VARIOS ESQUEMAS
COMANDO DE CONSULTA (L6) pg_query -- Realiza una consulta de PosgreSQL TAMBIÉN SE PUEDE UTILIZAR pg_select Descripción resource pg_query ( [conexión], string consulta [, resource identificador_de_enlace] )
PARÁMETROS COMANDO DE CONSULTA (L6) consulta, es un comando en sintáxis PostgreSQL bien sea de DDL o DML SELECT, UPDATE, INSERT, DELETE LA CONSULTA NO DEBE TERMINAR CON PUNTO Y COMA
OBTENIENDO DATOS DE LA CONSULTA (1/4) (L7) EN EL CASO DE UN SELECT pg_num_rows() indica cuantas filas (registros) fueron obtenidos por una instrucción SELECT PARA OBTENER LOS CAMPOS DE LOS REGISTROS SE DEBE UTILIZAR pg_fetch_array() LA CUAL DEVUELVE EN UN ARREGLO (CUYAS CLAVES SON LAS COLUMNAS DE LA CONSULTA) LOS CAMPOS EN EL CASO DE UN INSERT, DELETE o UPDATE pg_affected_rows() indica el número de Filas (registros) afectados
OBTENIENDO DATOS DE LA CONSULTA(2/4) (L7) $resultado = pg_query ( SELECT * FROM Empleados ); pg_query DEVUELVE UN RESULTSET $ne = pg_num_rows($resultado) ; for ($i = 0; $i < $ne; $i++) { $fila = pg_fetch_array($resultado); $nombre = $fila[ nombre ]; $sueldo = $fila[ sueldo ]; }
OBTENIENDO DATOS DE LA CONSULTA(3/4) (L7) pg_fetch_row($resultado) DEVUELVE UN ARREGLO ENUMERADO $ne = pg_num_rows($resultado) ; for ($i = 0; $i < $ne; $i++) { $fila = pg_fetch_row($resultado,$i); $nombre = $fila[0]; $sueldo = $file[1]; }
OBTENIENDO DATOS DE LA CONSULTA(4/4) (L7) pg_fetch_object($resultado) DEVUELVE UN OBJETO $ne = pg_num_rows($resultado) ; for ($i = 0; $i < $ne; $i++) { $fila = pg_fetch_object($resultado,$i); $nombre = $fila->nombre; $sueldo = $fila->sueldo; }
COMANDOS INSERT, UPDATE (1/2) (L7) RECORDAR LLENAR LOS CAMPOS CON addslashes ANTES DE ENVIAR A LA BASE DE DATOS RECORDAR CONVERTIR LOS TIPOS DE ACUERDO CON LA DEFINICIÓN EN LAS TABLAS doubleval() intval()
COMANDOS INSERT, UPDATE (2/2) (L7) $nombre = addslashes( Gala ); $sueldo = doubleval( 1000000 ); $comando = INSERT INTO Empleados VALUES (. $nombre.,.$sueldo. ) ; $resultado = $pg_query($comando); $nr = $pg_affected_rows()
MOSTRANDO RESULTADOS (L8) UNA VEZ ALMACENADOS EN VARIABLES PHP, IGUAL A CUALQUIER SCRIPT RECORDAR stripslashes COMBINAR TEXTO HTML CON RESULTADOS DE CONSULTAS O COMANDOS POSTGRESQL DENTRO DE PHP
COMANDOS EMBEBIDOS (L9) EJECUCIÓN DE FUNCIONES DE POSTGRESQL COMO CUALQUIER OTRA FUNCIÓN ESTILO PROGRAMACIÓN DE CURSORES SOPORTE NATURAL, DIRECTO EN PHP
FUNCIONES POSTGRESQL, INSTALACIÓN (L10) COMPILAR PHP CON SOPORTE POSTGRESQL OPCIÓN DE CONFIGURACIÓN --with-pgsql[=dir], EN PHP 4, LA OPCIÓN --with-pgsql NO ESTA HABILIDATA POR DEFECTO DESHABILITAR, OPCIÓN DE CONFIGURACIÓN --withoutpgsql.
OPCIONES CONFIGURACIÓN postgresql (L10) pgsql.allow_persistent pgsql.max_persistent pgsql.max_links pgsql.auto_reset_persistent pgsql.ignore_notice pgsql.log_notice
LISTA DE FUNCIONES (1/3) (L10) pg_affected_rows -- Obtiene el número de registros afectadas de la última operación PostgreSQL pg_close -- cierra el enlace con PostgreSQL pg_connect -- abre la conexión a un servidor PostgreSQL pg_db_query -- Envia un comando PostgreSQL al servidor
LISTA DE FUNCIONES (2/3) (L10) pg_last_error Texto del último mensaje de error pg_fetch_array -- Resultado consulta (registro) como una matriz asociativa, una matriz numérica o ambas pg_fetch_assoc -- Resultado consulta (registro) como una matriz asociativa pg_fetch_object -- Resultado consulta (registro) como un objeto pg_fetch_row -- Resultado consulta (registro) como una matriz con índices numéricos
LISTA DE FUNCIONES (3/3) (L10) pg_num_fields -- devuelve el número de campos de un resultado pg_num_rows -- Devuelve el número de filas de un resultado pg_pconnect -- Abre una conexión persistente al servidor PostgreSQL pg_query -- Envía una consulta de PostgreSQL pg_result -- Devuelve datos de un resultado
SEGURIDAD EN BASES DE DATOS WEB (L11) USUARIOS WEB, NO DEBERÍAN TENER PERMISOLOGÍA GRANT SELECT PARA TABLAS DE CATÁLOGOS INSERT PARA TABLAS DE ÓRDENES DE COMPRAS VALIDAR TODOS LOS DATOS ANTES DE EJECUTAR LOS COMANDOS postgresql SSL CUANDO SE TRANSMITAN PASSWORDS
PHPLIB (L12) NO FORMA PARTE DE PHP LIBRERÍA DE REUTILIZACIÓN PARA APLICACIONES WEB CON BASE DE DATOS DESARROLLADA EN ALEMANIA TRABAJA CON MYSQL Y POSTGRES
MODELO DE ABSTRACCIÓN DE DATOS (L13) SEPARACIÓN CAPA DE DATOS DE LA LÓGICA DEL NEGOCIO Y DE LA PRESENTACIÓN FUNCIONES (API) QUE ENCAPSULAN EN MANEJADOR CAMBIOS INMEDIATOS AL CAMBIAR LA BASE DE DATOS PROGRAMADORES WEB NO DEBERÍAN CONOCER TECNOLOGÍA ASOCIADA
CAPA DE DATOS (L13) DETALLES DE MANEJADOR SOPORTE MÚLTIPLES MANEJADORES VS. TECNOLOGÍA ODBC PHP SOPORTA LA MAYORÍA DE LOS MANEJADORES COMERCIALES