Bases de Datos Una de las principales ventajas de trabajar con páginas dinámicas es poder almacenar los contenidos en bases de datos. De esta forma, podemos organizarlos, actualizarlos y buscarlos más fácilmente. Como sabemos, una base de datos es un archivo que en su interior contiene información relacionada y organizada en tablas, donde cada fila guarda datos pertenecientes al mismo item (misma persona, mismo producto, etc.), y cada columna guarda uno solo de esos datos (apellido, precio, etc). Ejemplo: BASE DE DATOS MERCADO TABLA ARTÍCULOS TABLA PROVEEDORES precio stock cod_prov cod_prov empresa cod_articulo descripcion 10 Manteca 3.40 40 25 25 20 Mermelada 2.30 20 45 45 30 Yogur 1.20 60 25 direccion tel Sancor Velez 456 48796210 Arcor La Plata 456 44587985 Entonces, la base de datos (BD), contiene tablas; cada tabla posee una estructura de filas y columnas, donde cada fila se llama registro (record) y cada columna se llama campo (field). De esos campos, podemos tener uno que va a permitir recuperar un solo registro, por lo tanto su contenido no debe repetirse. Ese campo especial,se llama campo clave, o simplemente clave. En ciertas tablas, la clave está compuesta por más de un campo. La clave también permite crear las relaciones entre las tablas. Una base de datos por lo general contiene varias tablas, todas ellas relacionadas a través de un campo en común. En el ejemplo anterior, la tabla Articulos se relaciona con la tabla Proveedores por medio del campo cod_prov, o sea por el código de proveedor, el campo clave de la tabla Proveedores. TABLA PROVEEDORES Filas -> Registros cod_prov empresa direccion 25 Sancor Velez 456 45 Campo Clave Arcor La Plata 456 tel 48796210 44587985 Columnas -> Campos PHP ofrece interfaces para el acceso a la mayoría de las bases de datos comerciales, y por ODBC a todas las de Microsoft. Esto se realiza a partir de funciones para cada tipo de base de datos, y tambien, usando un idioma universal: SQL (Structured Query Language) que es común a todas las bases de datos. Es muy potente y fácil de aprender. La base de datos más usada con PHP es MySQL. Es gratuita, eficiente y simple. Una vez instalado el MySQL podemos ejecutar nuestras ordenes en modo MS-DOS. Según la versión del programa, accedemos de formas diferentes; la que veremos nosotros es MySql Server 5.0. Para entrar al mismo se debe hacer: Inicio – Programas – MySQL – MYSQL Server 5.0 - MySQL Command Line Client Llegados a este punto veremos cómo un mensaje de bienvenida aparece en nuestra pantalla. En estos momentos nos encontramos dentro de la base de datos. A partir de ahí podemos realizar todo tipo de operaciones por sentencias SQL: Operaciones con Bases de Datos Creación: Para crear la BD, o sea, el contenedor de tablas, se ejecutará el comando create database desde el prompt de MySQL. Ejemplo: mysql> create database mercado; Si el mensaje es Query Ok, en c:\Mysql\data se creó una carpeta llamada mercado, que va a contener las tablas cuando sean creadas. Borrado: Se ejecuta el comando drop database: mysql> drop database mercado; Si el mensaje es Query Ok, en c:\Mysql\data la carpeta llamada mercado, desapareció. Apertura: Para usar una base de datos que ya fue creada, se la debe abrir, con el comando use. Si creamos nuevamente la base mercado y cerramos el mysql, cuando queramos volver a usarla debemos escribir: mysql> use mercado; Listado de las BD del servidor: se usa el comand show databases: mysql> show databases; Tipos de datos Una vez que se crea la BD, es necesario crear las tablas correspondientes dentro de la misma. Para cada campo de las tablas, es necesario determinar el tipo de datos que va a contener. Los tipos de datos más usados son: Tipo de Dato BIT / BOOLEAN / LOGICAL / YESNO BYTE COUNTER / AUTOINCREMENT DATETIME / DATE / TIME Longitud DOUBLE / FLOAT 8 bytes INTEGER / INT LONG 2 bytes 4 bytes SINGLE / REAL 4 bytes Descripción 1 byte Valores Sí/No, o True/False 1 byte Valor entero entre 0 y 255. 4 bytes Número incrementado automáticamente (de tipo Long). 8 bytes Valor de fecha u hora entre los años 100 y 9999. CHAR(N) 1 byte por caracter VARCHAR(N) 1 byte por carácter TEXT / STRING 1 byte por caracter Valor real de doble precisión con un rango de –1.79769313486... a –4.94065645841... para valores negativos, 4.94065645841... a 1.7976313448623... para valores positivos, y 0. Entero corto entre –32768 y 32767. Entero largo entre –2147483648 y 2147483647. Valor real de simple precisión con un rango de –3.402823... a – 1.401298... para valores negativos , 1.401298... a 3.402823... para valores positivos, y 0. Cadena de longitud fija. Podrá contener desde 0 a 255 caracteres. Ejemplo: Si se escribe char(4) y la cadena solo tiene 2 caracteres, llena con espacios los otros dos. Cadena de longitud variable. Podrá contener desde 0 a 255 caracteres. Ejemplo: Si se escribe VarChar(4) y la cadena solo tiene 2 caracteres, almacena esos dos. De 0 a 255 caracteres. Operaciones con tablas Creación: Se usa el comando create table, con el siguiente formato: CREATE TABLE tabla ( campo1 tipo (tamaño) índice1, campo2 tipo (tamaño) índice2, ) Ejemplo: Creamos en la BD mercado, las tablas Artículos y Proveedores: CREATE TABLE articulos ( cod_articulo integer primary key, descripción text (40), precio float, stock float, cod_prov integer ); CREATE TABLE proveedores ( cod_prov integer primary key, empresa text (40), direccion text (40), tel text (15), ); Primary Key significa que esos campos son las claves primarias de cada tabla. Si queremos ver qué tablas creamos en la BD, ejecutamos: mysql> show tables; Borrado: Para borrar una tabla usamos por ejemplo: mysql> drop table proveedores; Visualización de la estructura de una tabla: Si queremos ver qué campos contiene la tabla, de qué tipo son y demás info, ejecutamos el comando describe: mysql> describe articulos; Modificación de la estructura de la tabla: Para agregar o quitar campos se usa la instrucción alter table: Para agregar un campo: alter table tabla add column camponuevo tipo (tamaño); alter table proveedores add column ciudad text (20); Para borrar un campo: en vez de add column, se coloca drop column, y se saca todo lo referente al tipo de datos: alter table proveedores drop column ciudad; Manipulación de datos Ingreso de registros: se utiliza el comando insert. insert into tabla (campo1, campo2,...) values (valor_campo1, valor_campo2...); Ejemplo: insert into articulos (cod_articulo, descripcion, precio, stock,cod_prov) values (10, “Manteca”, 3.40,40,25); Consulta de registros: Si quisiéramos ver qué registros tiene la tabla, usaríamos el comando select: select * from articulos; Muestra todos los campos, por eso el asterisco. Si queremos ver sólo algunos, los debemos especificar separados por comas: select descripcion, precio from articulos; Modificación de registros: Para editar el contenido de uno o más campos, usamos el comando update: update tabla set campo1 = valor_campo1, campo2 = valor_campo2,... Ejemplo: update articulos set descripcion=”Margarina”, precio=4.50 Borrado de registros: se usa el comando delete: delete from articulos; Tener cuidado porque borra TODO el contenido de la tabla. Cláusula where Para consultar, modificar o borrar ciertos registros de una tabla, o sea, los que cumplen con una o más condiciones, se agrega al final de cada comando visto la cláusula where condición: Ejemplo, se quiere borrar sólo los registros de la tabla cuyo precio sea mayor a $4: delete from articulos where precio > 4; Se quiere listar todos los registros cuyos proveedor sea Arcor: select * from proveedores where empresa=”Arcor”; Se quiere modificar el precio de la margarina a 4.70: update articulos set precio=4.70 where descripcion=”Margarina”; Si se desea trabajar con más de una condición, se utilizan los operadores lógicos and, or y not: select * from articulos where precio>5 and stock >10; Operadores relacionales: > Mayor que < Menor que >= Mayor o igual que <= Menor o igual que <> Distinto = Igual Otros operadores: Like In y Not In Selecciona los registros cuyo valor de campo se asemeje, no teniendo en cuenta mayúsculas y minúsculas. Da un conjunto de valores para un campo para los cuales la condición de selección es (o no) valida Is Null y Is Not Null Selecciona aquellos registros donde el campo especificado esta (o no) vacío. Between...And Selecciona los registros comprendidos en un intervalo Distinct Selecciona los registros no coincidentes Desc Clasifica los registros por orden inverso Comodines: * Sustituye a todos los campos % Sustituye a cualquier cosa o nada dentro de una cadena _ Sustituye un solo carácter dentro de una cadena Ejemplos: Suponiendo que tenemos una tabla llamada clientes: En esta sentencia seleccionamos todos los clientes de Madrid cuyo nombre no es Pepe. Como puede verse, usamos like en lugar de = para evitar inconvenientes debido al uso o no de mayúsculas. select * from clientes where ciudad like “rosario” and not nombre like “Pepe”; Si quisiéramos consultar a los clientes cuyo apellido empieza con A y cuya cantidad de pedidos está entre 20 y 40: select * from clientes where apellido like “A%” and pedidos between 20 and 40; Para consultar a aquellos clientes que vivan en Buenos Aires, Rosario y Córdoba, usamos el operador in: select * from clientes where ciudad In (“Buenos Aires”, “Rosario”,”Córdoba”);