Download Conferencia 6 Acceso a Datos en PHP Archivo

Document related concepts

SQL wikipedia , lookup

Inyección SQL wikipedia , lookup

PhpMyAdmin wikipedia , lookup

Microsoft SQL Server wikipedia , lookup

Mecanismos de almacenamiento (MySQL) wikipedia , lookup

Transcript
Asignatura: Programación Web
Año: 3ro.
Tema II: Programación del lado del servidor.
Tipo de clase: Conferencia.
Título: Acceso a datos en el lenguaje del lado del servidor
Sumario:
 Bases de datos en la Web.
 Lenguaje SQL.
 Acceso a bases de datos MySQL en PHP.
 Recordando la arquitectura tres capas.
Objetivos:
• Analizar cómo interacciona el lenguaje de programación PHP con los sistemas
gestores de base de datos a través de las librerías de acceso a datos.
• Aplicar las principales funciones, clases y métodos para el acceso a bases de datos
MySql.
Medios:
Pizarra,
Computador.
plumones,
TV,
1. Bases de datos en la Web
Una de las principales ventajas que presenta el trabajar con páginas dinámicas es el poder
almacenar los contenidos en bases de datos. De esta forma, podemos organizarlos,
actualizarlos y buscarlos de una manera rápida, eficiente y más simple.
Las bases de datos relacionales tienen la posibilidad de relacionar varias tablas de
datos entre si, compartir la información, evitan la duplicidad de los datos y permiten
almacenar de una forma estructurada y eficiente toda la información de un sitio Web.
Además el uso de bases de datos en la Web nos brinda una serie de ventajas tales como:
o
o
o
o
o
o
o
o
o
o
Dinamismo del sitio Web.
Proporcionar información actualizada.
Facilitar la realización de búsquedas.
Acceso remoto a bases de datos.
Implementar sistemas de control de acceso.
Almacenar preferencias de los usuarios.
Comercio Electrónico.
Seguimiento de visitantes.
Distribución de multimedia.
Servicios al cliente.
Bibliotecas de acceso a datos en PHP
Quizás la característica más potente y destacable de PHP es su soporte para una
gran cantidad de bases de datos. Escribir una interfaz Web para mantener una base
de datos es una tarea simple con PHP; ya que cuenta con un conjunto de módulos,
extensiones, e incluso bibliotecas de clases para el acceso a múltiples tipos de
bases de datos, las que se muestran a continuación:
Adabas D
Empress
IBM DB2
FilePro (read-only)
Informix
Ingres
FrontBase
mSQL
Direct MS-SQL
msSql
MySQL
ODBC
PostgreSQL
Velocis
Solid
Sybase
InterBase
Oracle (OCI7, OCI8)
También se cuenta con una extensión DBX de abstracción de base de datos que permite
usar de forma transparente cualquier base de datos soportada por la extensión.
Adicionalmente, PHP soporta ODBC (del inglés Open Database Connectivity Standard, en
español Estándar Abierto de Conexión con Bases de Datos), así que puede conectarse a
cualquier base de datos que soporte tal estándar. Entre ellas se incluyen los productos de
Microsoft y muchos otros.
Para la conexión a los diferentes tipos de bases de datos el lenguaje PHP cuenta con un
conjunto de extensiones de la biblioteca PECL (PHP Extension Community Library), las
cuales se pueden incluir directamente en la configuración del PHP en el archivo php.ini o
dinámicamente durante la ejecución del script, es decir dentro del código de una página php
con la función dl(‘extension.dll’).
En la versión de PHP para Windows las extensiones son DLLs que se incluyen al mismo.
Algunas de estas extensiones son:
•
php_mysql.dll
Biblioteca de funciones para el acceso a bases de datos MySQL.
•
php_mysqli.dll
Biblioteca de clases para el acceso a bases de datos MySQL
•
php_pgsql.dll
Biblioteca de funciones para el acceso a bases de datos PostgreSQL.
•
php_mssql.dll
Biblioteca de funciones para el acceso a bases de datos MS SQL Server.
•
php_dbx.dll
Biblioteca de funciones para el acceso a bases de datos de tipo:
o FrontBase
o Microsoft SQL Server
o MySQL
o ODBC
o PostgreSQL
o Sybase-CT
o Oracle (oci8)
o SQLite
2. Recordando el lenguaje SQL
SQL (Structured Query Language, Lenguaje de Consulta Estructurado) es un lenguaje
declarativo de acceso a base de datos relacionales que permite especificar diversos
tipos de operaciones sobre las mismas, además explota la flexibilidad y potencia de los
sistemas relacionales permitiendo gran variedad de operaciones sobre los mismos.
Entre las principales características se puede mencionar:
•
•
•
•
•
•
El SQL utiliza el álgebra y el cálculo relacional permitiendo utilizar consultas con
el fin de recuperar información de interés de una base de datos, de una forma
sencilla.
Es un lenguaje de cuarta generación (4GL).
El SQL es un lenguaje de acceso a bases de datos que explota la flexibilidad y
potencia de los sistemas relacionales permitiendo gran variedad de operaciones
sobre los mismos.
Es un lenguaje declarativo de alto nivel o de no procedimiento.
Es orientado al manejo de conjuntos de registros, y no a registros individuales.
Permite una alta productividad en codificación.
A continuación se muestra el procedimiento a través del cual PHP se comunica con el
sistema gestor de base de datos:
Para el manejo a cualquier tipo de base de datos es preciso tener un conocimiento
básico del DDL (Data Description Language) y el DML (Data Manager Language) del
gestor de bases de datos con que se va a trabajar.
El DDL y DML no son más que un conjunto de sentencias del lenguaje SQL, para definir
o manipular los datos en un gestor determinado, aunque es válido aclarar que este
lenguaje varía muy poco de un gestor a otro.
Existen cuatro sentencias fundamentales, que son las más utilizadas en cualquier
sistema de bases de datos, estas son, INSERT, DELETE, UPDATE y SELECT para
insertar, eliminar, actualizar y seleccionar respectivamente campos y filas de una o
varias tablas.
Veamos su sintaxis básica y algunos ejemplos de uso. Para ello utilizaremos una tabla
encuesta con cinco campos: El campo id es el identificador único de la tabla encuesta,
el campo nombre, el campo simpleOpcion, el campo categorías y el campo editor:
encuesta
Id
nombre
simpleOpcion
categoria
editor
SELECT
Sintaxis:
SELECT expresión FROM tabla
[WHERE condición]
[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC]
[LIMIT [offset,] row_count | row_count OFFSET offset]
Ejemplo:
SELECT * from encuesta WHERE simpleOpcion = true
ORDER BY categoria DESC
Se obtiene todas las encuestas de opción simple ordenadas por el nombre de categoría
descendentemente.
INSERT
Sintaxis:
INSERT [INTO] nombre_tabla [(nombre_columna,...)] VALUES ((expresión |
DEFAULT),...), (...),...
INSERT [INTO] nombre_tabla SET nombre_columna=(expresión | DEFAULT), ...
Ejemplo:
INSERT INTO encuesta (nombre, simpleOpcion, categoria, editor)
VALUES (‘encuesta1’,true,’programacion’,’Tello San’)
Inserta una nueva encuesta en la base de datos con los valores especificados.
UPDATE
Sintaxis:
UPDATE nombre_tabla SET nombre_columna1=expr1
[,nombre_columna2=expr2 ...]
[WHERE condición]
[ORDER BY ...]
[LIMIT row_count]
Ejemplo:
UPDATE encuesta SET editor = “Pedro”
WHERE nombre = “encuesta2”
Modifica el editor de una encuesta cuyo nombre es “encuesta2”
DELETE Sintaxis:
DELETE FROM nombre_tabla
[WHERE condición] [ORDER BY ...] [LIMIT row_count]
Ejemplo:
DELETE FROM encuesta where nombre = ‘encuesta2’
Borra todas aquellas encuestas cuyo nombre sea “encuesta2”
3. Acceso a bases de datos MySQL en PHP
MySQL es un sistema gestor de base de datos relacionales más utilizados junto a PHP
y el apache como servidor web. Entre sus características podemos mencionar:
•
Es un gestor relacional, multihilo, multiplataforma y multiusuario.
•
Presenta múltiples motores de almacenamiento (MyISAM, Merge, InnoDB, BDB,
Memory/heap, MySSQL Cluster ).
•
Permite trabajar transaccionalmente.
•
Disponibilidad en gran cantidad de plataformas y sistemas.
•
Conectividad segura.
•
Búsqueda e indexación de campos de texto.
•
Software de fuente abierta
Como se dijo anteriormente para el trabajo con MySQL el lenguaje PHP tiene dos
extensiones, php_mysql y php_mysqli. A continuación veremos esta última como la
versión mejorada con un modelo orientado a objetos.
La extensión php_mysqli contiene tres clases de objetos fundamentales, que son:
mysqli: Representa una conexión entre PHP y la base de datos MySQL.
mysqli_stmt: Representa una sentencia preparada.
mysqli_result: Representa el resultado obtenido de la consulta hecha en la base de
datos.
De estas tres clases la primera y la última son las más usadas comúnmente. De las
cuales estudiaremos sus métodos y propiedades principales.
Clase mysqli
Métodos
mysqli - constructor de un nuevo objeto mysqli.
change_user - cambia el usuario del identificador de enlace especificado.
close - cierra una conexión previamente abierta.
commit - completa la transacción actual.
connect - abre una nueva conexión al servidor de MySQL.
init - inicializa el objeto mysqli.
kill - solicita al servidor destruir un hilo de MySQL.
multi_query - realiza consultas de SQL múltiples.
more_results - chequea si existen más resultados de la consulta múltiple actualmente
ejecutada.
next_result - lee el siguiente resultado de la consulta múltiple actualmente ejecutada.
ping - llama una conexión con el servidor o reconecta si no hay conexión.
prepare - prepara una sentencia SQL.
query - ejecuta una sentencia SQL.
rollback - deshace la transacción actual.
select_db - selecciona la base de datos por defecto.
store_result - transfiere un resultado de la última consulta.
Propiedades
affected_rows - obtiene el número de filas afectadas en la operación MySQL previa.
errno - regresa el código de error para la llamada a función más reciente.
error - regresa la cadena de error para la llamada a función más reciente.
field_count - regresa el número de columnas para la consulta más reciente.
insert_id - regresa el identificador generado automáticamente usado en la última
consulta.
Clase mysqli_result
Métodos
close - cierra el resultado.
data_seek - mueve el puntero interno del resultado.
fetch_field - obtiene la información de la columna en el resultado.
fetch_fields - obtiene la información para todas las columnas del resultado.
fetch_field_direct - obtiene información de la columna para la columna dada.
fetch_array - recupera una fila como una matriz asociativa, una matriz numérica, o
ambos.
fetch_assoc - obtiene una fila como una matriz asociativa.
fetch_object - obtiene una fila como un objeto.
fetch_row - obtiene una fila como una matriz enumerada.
close - libera la memoria ocupada por el resultado.
field_seek - fija el apuntador del resultado a la posición especificada.
Propiedades
current_field - regresa la posición de puntero actual.
field_count - regresa el número de campos en el resultado.
lengths - regresa una matriz con la longitud de los campos.
num_rows - regresa el número de filas en el resultado.
Pasos para conectarse de PHP a MySql
Los pasos necesarios para acceder desde PHP a una base de datos son los siguientes:
1. Conectar con el servidor de bases de datos.
2. Seleccionar una base de datos.
3. Enviar la instrucción SQL a la base de datos.
4. Obtener y procesar los resultados.
5. Cerrar o liberar la conexión con el servidor de bases de datos.
A continuación se muestra cómo lograr el acceso a MySQL desde PHP a través del uso
de las funciones que se vieron anteriormente:
1. Conectar con el servidor de bases de datos (Crear el objeto mysqli):
$mysqli = new mysqli("localhost", "user", "password");
2. Seleccionar una base de datos:
$mysqli->select_db(“dbname”)
3. Enviar la instrucción SQL a la base de datos:
$consulta = $mysqli->query(“sentencia sql”)
4. Obtener y procesar los resultados:
$consulta->num_rows() y $consulta ->fetch_object()
5. Cerrar la conexión con el servidor de bases de datos:
$mysqli->close()
Conectar con el servidor de bases de datos:
mysqli_connect(): Devuelve un objeto mysqli con la conexión en caso de éxito y
false en caso contrario
Sintaxis:
$mysqli = new mysqli(servidor, user, pass);
Ejemplo:
$mysqli = new mysqli(“localhost”, “root”, “root”) or die (“Error al conectarse al
SBD”);
Seleccionar una base de datos:
mysqli_select_db(): Devuelve true en caso de éxito y false en caso contrario.
Sintaxis:
$mysqli->select_db(database);
Ejemplo:
$mysqli->select_db (“Encuestas”) or die (“No se puede seleccionar la BD”);
Enviar la instrucción SQL a la base de datos:
mysqli_query(): Devuelve un objeto mysqli_result o true (dependiendo de la
instrucción) si la instrucción se ejecuta correctamente y false en caso contrario.
Sintaxis:
$consulta = $mysqli->query(query);
Ejemplo:
$consulta = $mysqli->query(“select * from encuesta”) or die (“Fallo en la
consulta”);
Obtener y procesar los resultados:
mysqli_num_rows, mysqli_fetch_object(): En el caso de que la instrucción enviada
produzca unos resultados, mysqli_query() realiza una consulta a la Base de Datos y
devuelve las filas de la tabla afectadas por la instrucción. La propiedad
mysqli_num_rows devuelve el número de filas afectadas y para obtener los
nombres de los valores de las distintas filas del resultado se utiliza la función
mysqli_fetch_object(), que obtiene una fila del resultado en un objeto, donde los
atributos son los campos de la consulta.
Sintaxis:
// Obtiene el número de filas de un resultado
$nfilas = $consulta ->num_rows;
$fila = $consulta->fetch_object($consulta);
Obtención de las filas:
$nfilas = $consulta ->num_rows;
if($nfilas==0){
echo “No se obtuvo ningún resultado”;
} else {
while ($fila = $consulta->fetch_object())
{
//procesar fila i-ésima de los resultados
echo “Nombre: ”.$fila->nombre;
echo “Categoria: ”.$fila->categoria;
}
}
Cerrar la conexión con el servidor de bases de datos:
mysqli_close()
Sintaxis:
$mysqli->close();
Ejemplo:
$mysqli->close();
Recordando la arquitectura tres capas
La arquitectura tres capas, separa los datos de una aplicación, la interfaz de usuario y la
lógica en tres componentes distintos.
Muchas aplicaciones pueden hacer lo siguiente:
•
Cálculos u otros procesos de negocios.
•
Ejecución de reglas de negocios.
•
Validación de datos relacionados al negocio.
•
Manipulación de datos.
•
Ejecución de las reglas de datos relacional.
•
Interactuar con aplicaciones externas o servicios.
•
Interactuar con otros usuarios.
Se pueden tomar estos tipos de servicios y generalizarlos dentro de los tres grupos o
capas que a continuación se resumen:
•
Interfaz de usuario (Capa de Presentación)
o Interactuar con otros usuarios.
o
Interactuar con aplicaciones externas o servicios.
•
Procesos de negocios (Capa de Negocios)
o Cálculos u otros procesos de negocios.
o Ejecución de reglas de negocios.
o Validación de datos relacionados al negocio.
•
Procesos de datos (Capa de Servicios de Datos).
o Manipulación de datos.
o Ejecución de las reglas de datos relacional.
La división de estos procesos de aplicaciones y su distribución entre diferentes
procesos cliente/servidor son conocidas como Procesamiento Distribuido.
Generalizando estos procesos dentro de estas tres categorías o capas es una
distribución lógica y no refleja necesariamente alguna opción de diseño físico sobre
computadoras, terminales u otros equipos. Se puede desarrollar una aplicación
cliente/servidor distribuida basada sobre estas tres capas de Presentación, Lógica de
Negocios y Servicios de Datos y tener la aplicación corriendo sobre una simple
computadora. Alternativamente, se pueden esparcir estas tres capas a través de un
gran número de diferentes computadoras sobre una red. De cualquier forma se ha
desarrollado una aplicación cliente/servidor de tres capas.
Puede recordar mejor lo explicado anteriormente en la teleconferencia #6 (a partir del
minuto 21)
Hasta este momento ya se tiene el conocimiento necesario para realizar una pequeña
aplicación tres capas.
A continuación el profesor debe ilustrar un ejemplo de cómo crear una aplicación
tres capas haciendo énfasis en la capa de acceso a datos.
Conclusiones:
En esta conferencia vimos la importancia del uso de las bases de datos en la Web. Se
explicaron algunas de las funciones de acceso a datos que tiene PHP así como las
distintas extensiones de PHP para el manejo de bases de datos, sus clases y sus
métodos para el acceso a bases de datos de MySQL. Además se trató la diferencia que
existe entre la biblioteca de clase Mysqli y la biblioteca de funciones de MySQL;
Estudio Independiente:
Implementar el acceso a datos de las clases encuesta, encuesta privada y encuesta
publica del caso de estudio.
Bibliografía:
1. Moodle asignatura de Programación Web
Resumen de las funciones de php para trabajar con base de datos
2. http://www.aprende-php.com.ar/ref.dbx.html
Para estudiar la extensión .DBX de php