bases de datos con php

Upload: amerika-street-lopez

Post on 13-Jul-2015

28 views

Category:

Documents


0 download

TRANSCRIPT

Bases de Datos con PHP

Como se mencion en introduccin PHP viene con un API que le permite interactuar con casi todas las bases de datos disponibles en el mercado actualmente. La base de datos MySql es la que nos interesa ms particularmente en este curso. A continuacin se presentar los conceptos bsicos necesarios para empezar a crear aplicaciones web con MySql. Se vern los aspectos siguientes: 1. 2. 3. 4. 5. Creando una base de datos. Usuarios y privilegios. Creando tablas en una base de datos. Tipos de campos en MySql. Conexin a MySql desde PHP Operaciones bsicas desde PHP. Uso de Phpmyadmin para administrar bases de datos MySql.

6. 7.

Creando una base de datos.Por el momento y hasta el punto 5 se utilizar el monitor de MySql para efectuar las operaciones requeridas. Posteriormente su har uso de phpmyadmin que es una herramienta que proporciona un interfaz grfico basado en web que es poderoso y fcil de utilizar. Como conectarse al servidor. Para interactuar con el servidor MySql abrir una ventana de comandos y teclear lo siguiente: >mysql h hostname username -p

Dnde hostname es el IP o nombre del host al que se quiere conectar y username es el nombre del usuario. Por ejemplo: >mysql h localhost u root p A continuacin el prompt le pedir un password. Ingrese el password creado cuando se completo la instalacin. Si el password es correcto debe aparecer un mensaje similar al siguiente: Welcome to the mysql monitor. Commands end with ; or \g. Your MySql connection id is 16 to server version 3.23.52-nt Type help Mysql> _ El monitor de Mysql esta listo para recibir comandos. or \h for help. Type \c to clear the buffer.

Para crear bases de datos se utiliza el comando CREATE DATABASE. Por ejemplo para crear la base de datos CATALOGO se ingresa el siguiente comando en el prompt de MySql: MySql>CREATE DATABASE catalogo; Query ok, 1 row affected (0.27 sec) Ntese el empleo de un punto y coma para terminar el comando. El punto y coma indica a MYSQL que se ha terminado de ingresar comandos y que se los debe ejecutar ahora. La base de datos catalogo ha sido creada. Esto se puede verificar con el comando SHOW DATABASES que muestra una lista de las bases de datos existentes en el sistema. El paso siguiente es naturalmente crear tablas en esta base de datos. Antes de eso se dar una breve explicacin del sistema de privilegios existente en MySql.

Usuarios y Privilegios.Un sistema/servidor MySql puede tener varios usuarios. El usuario ROOT debe ser usado solamente para propsitos administrativos. Esto por razones de seguridad. Para cada persona/usuario que necesite tener acceso al sistema se debe crear una cuenta es decir un login y un password. Cada usuario debe tener diferentes niveles de acceso o privilegios segn se funcin especifica. En el caso de una base de datos para Web es una buena idea el crear por lo menos un usuario para cada Aplicacin Web que se cree.

El sistema de privilegios en MySql.Un privilegio es el derecho que tiene un determinado usuario de efectuar ciertas acciones sobre determinados objetos. Es un concepto similar a los permisos de acceso en el sistema de archivos. Al crear un usuario en el sistema MySql se le debe asignar un conjunto de privilegios para especificar que es lo que puede y que es lo que no puede hacer. Los privilegios se refieren, por ejemplo, a la posibilidad de efectuar INSERT, UPDATE, DELETE, o crear tablas y bases de datos. El principio del privilegio mnimo. Un usuario debe tener el conjunto mnimo de privilegios que le permitan ejecutar su tarea. Este principio elemental es muchas veces pasado por alto, pero es aplicable los sistemas de informacin y tambin en Aplicaciones Web con MySql. contexto, un usuario que hace consultas a la base de datos por Internet porqu tener los mismos privilegios que un administrador. Luego se debe usuario diferente al ROOT para cada aplicacin web. Comandos GRANT Y REVOKE. Para crear un usuario y asignarle privilegios se utiliza el comando GRANT. La forma general de este comando es: GRANT privilegios [columnas] ON item TO nombre_de_usuario [IDENTIFIED BY password] [WITH GRANT OPTIONS ] en todos En este no tiene crear un

Los parmetros entre corchetes son opcionales. Luego de la palabra clave GRANT esta una lista de privilegios separados por comas. Existe en MySql un conjunto predefinido de estos. Se puede especificar los privilegios columna por columna opcionalmente. El item puede ser una base de datos o una tabla en dnde aplicar estos privilegios. Se puede usar comodines (wildcards) con el asterisco. Por ejemplo *.* significa que se aplique en todas las tablas de todas las bases de datos. CATALOGO.* significa que debe aplicarse en todas las tablas de la base de datos CATALOGO. Nombre_de_usuario representa el usuario al que se le esta asignado este privilegio. Se puede especificar el dominio de usuario. Por ejemplo [email protected]. La opcin WITH GRANT OPTIONS se usa para otorgar a un usuario la facultad de crear y cambiar los privilegios de otros usuarios.

REVOKE. El comando REVOKE es opuesto y complementario a GRANT. Se usa para quitar privilegios a usuarios. La forma general de este comando es la siguiente. REVOKE privilegios [columnas] ON item FROM nombre_de_usuario Ejemplo. Crear un usuario bolivar con password campon con el privilegio de efectuar INSERT en la tabla PRODUCTOS de la base de datos CATALOGO, GRANT insert ON CATALOGO.PRODUCTOS TO bolivar IDENTIFIED BY campeon Se quita todos los privilegios a dario: REVOKE insert ON *.* FROM bolivar. Tipos y niveles de privilegios. Se especificar el conjunto de privilegios existentes y como deben ser usados. Existen tres tipos bsicos de privilegios: los privilegios para usuarios normales, los privilegios de administracin y algunos privilegios especiales. El administrador debe asignar estos privilegios a los usuarios correspondientes a su discrecin, aplicando el principio del privilegio mnimo. Privilegios de nivel usuario. En la tabla siguiente se muestra los privilegios que se debe asignar a un usuario normal. Como se ve estos se refieren, en mayora, a los comandos SQL que el usuario puede ejecutar. Privilegio SELECT INSERT UPDATE DELETE INDEX ALTER CREATE DROP Se aplica a Tablas, columnas Tablas, Columnas Tablas, columnas tablas tablas tablas Tablas, columnas Tablas, Descripcin Permite a u usuario consultar tuplas de tablas Permite tabla. Permite tabla. Permite Permite tabla. Permite tabla. Permite datos. Permite a un usuario insertar una nueva tupla en una a un usuario modificar una tupla de una a un usuario eliminar una tupla de un atabla. a un usuario crear y eliminar ndices a una a un usuario modificar la estructura de una a un usuario crear nuevas tablas o bases de que un usuario elimina una tabla o una base

columnas

de datos del sistema.

Privilegios de nivel administrativo.

Privilegios

RELOAD

Descripcin Permite que un administrador recargue las tablas de privilegios, eliminado los privilegios actuales. Permite que un administrador apague el servidor MySQl. Permite que un administrador vea los procesos que se ejecutan y los pare en caso necesario. Permite que se lea datos de un archivo y se los almacene en una tabla, y viceversa.

SHUTDOWN PROCESS FILE

El privilegio FILE es til para algunos usuarios no administradores ya que es frecuente la necesidad de llenar una tabla a partir de datos de un archivo. Los otros privilegios son claramente para labores de administracin. Existen adems dos otros tipos de privilegios especiales sealados en la tabla siguiente. Privilegios ALL USAGE descripcin Asigna todos los privilegios Asigna el derecho de ingresar al sistema pero sin ningn privilegio.

Todos estos privilegios y los usuarios a los que estn asignados estn almacenados en una base de datos llamada mysql en tres tablas, las tablas user, hosts y db. Se puede cambiar los privilegios modificando directamente estas tablas en vez de utilizar los comandos GRAN o REVOKE. Cmo se trata de una base de datos y una tabla ms en el sistema se debe tener especial cuidado al permitir que algn usuario tenga acceso a la base de datos mysql. En general debe ser solamente el administrador. Creando un usuario para el WEB Se debe crear un usuario en el sistema para acceder a la base de datos desde nuestros script PHP. Suponiendo que se utilizara la base de datos CATALOGO el usuario se puede crear con el comando siguiente: Mysql> GRANT select,insert,update,delete ->on CATALOGO.* ->TO webuser IDENTIFIED BY passusr;

Creacin de tablas.Una vez creada la base de datos CATALOGO se puede usar el comando CREATE TABLE para crear las tablas relativas a la misma. La forma general de usar este comando es:

CREATE TABLE nombre_tabla (columnas)

Ejemplo. Crear las tablas siguientes en la base de datos catalogo. Las llaves primarias estn subrayadas. CATEGORIAS (id_categoria, nombre_categoria, descripcin) PRODUCTOS(id_producto,nombre_producto,id_categoria) VENDEDOR(id_vendedor,nombre_vendedor) Para esto se deben usar los comandos siguientes. CREATE TABLE categoras (id_categoria INT UNSIGNED NOT NULL AUTOINCREMENT PRIMARY KEY, nombre_categoria VARCHAR(255), descripcin VARCHAR(255)); CREATE TABLE productos (id_producto INT UNSIGNED NOT NULL AUTOINCREMENT PRIMARY KEY, nombre_producto VARCHAR(255), id_categoria INT UNSIGNED); CREATE TABLE vendedor (id_vendedor INT UNSIGNED NOT NULL AUTOINCREMENT PRIMARY KEY, nombre_vendedor VARCHAR(255)); Como se lee en el ejemplo se debe mencionar, luego del comando CREATE TABLE, el nombre de la tabla que se desea crear seguido por la lista de columnas entre parntesis separadas por comas. Cada columna se especifica nombrando primero a la columna y enseguida cierto nmero de parmetros para definir algunos atributos especficos como ser el tipo de campo, si el campo puede ser nulo, si es llave primaria. En el ejemplo se declara cada llave primaria como un enteros no nulo y adems se especifica que sea AUTOINCREMENT, esto har que cada vez que se inserte una tpla a la tabla el campo llave primaria se incrementar de una unidad respecto a la tpla anterior. Esto se hace para garantizar llaves primarias nicas. No es obligatorio declarar llaves primarias AUTOINCREMENT pero es til en muchas ocasiones.

Tipos de datos en MySQL.En el ltimo ejemplo vimos ya algunos tipos de datos, en particular enteros y cadenas de caracteres representados por las palabras clave INT y VARCHAR respectivamente. A continuacin una referencia resumida de los principales tipos de datos en MySQL. Existen tres categoras de tipos de datos. Estas son tipos numricos, de tiempo, y cadenas de caracteres. Para cada una de estas categoras existen varios tipos diferenciados en general por el tamao de los datos a almacenarse. A continuacin los principales tipos de datos en MySql. Para una referencia completa consultar el manual de MySql en www.mysql.com.

Tipos numricos. Los tipos numricos incluyen enteros y de punto flotante. Para estos ltimos se puede especificar el nmero de dgitos despus de la coma. Para los tipos enteros se puede especificar si son enteros sin signo (UNSIGNED). Tipo TINYINT INT FLOAT(precision) Rango -127 128 0 255 -2 31 2 31 -1 Depende de la precisin indicada Almacenamiento (bytes) 1 4 Variable Descripcin Enteros muy pequeos Enteros Se puede usar para especificar datos de simple o doble precisin de punto flotante. Numero de punto flotante de doble precisin

DOUBLE

1.7976931348 6 E 308 8

Tipos de Tiempo Existe una variedad de tipos para almacenar datos de tiempo como ser fechas, horas aos. Los principales estn en la siguiente tabla. Tipo DATE TIME TIMESTAMP[M] Rango 1000-01-01 9999-12-31 -838:59:59 838:59:59 1970-01-01 Descripcin Una fecha. Ser desplegada en el formato AAAA-MM-DD Una hora. Desplegada en el formato HH:MM:SS Una marca de tiempo segn el formato UNIX. Es una forma de contar el tiempo transcurrido desde la fecha sealada. El formato depende del vaor de M

Tipos de cadenas de caracteres.

Existen tres grupos de tipos relacionados con cadena de caracteres. En el primero estn CHAR y VARCHAR tiles para almacenar textos cortos, generalmente hasta 255 caracteres. En el segundo grupo estn los tipos TEXT y BLOB. Sirven para almacenar textos largos y datos binarios respectivamente. Existen varios subtipos segn el tamao de los datos a almacenarse. En el ltimo grupo estn dos tipos especiales que son SET y ENUM que sirven para almacenar conjuntos de datos y enumerados. El tipo SET admite varios valores de ese conjunto en una columna mientras que ENUM solo permite uno.

Tipo CHAR(M) VARCHAR(M) BLOB TEXT MEDIUMBLOB MEDIUMTEXT ENUM(valor1,valor2,..) SET(valor1,valor2,)

Longitud mxima 1 a 255 caracteres 1 a 255 caracteres 65 535 65 535 16 777 215 16 777 215 65535 valores como mximo. 64 valores max en el SET

Descripcin Cadena de longitud fija M Cadena de hasta longitud M Un campo BLOB de longitud normal. Un campo texto de longitud normal. Un campo BLOB de longitud media. Un campo texto de longitud media. Una enumeracin de valores Un conjunto de valores.

Conexin a MySQL desde PHP.Una vez que tenemos una base de datos creada en MySql, por ejemplo la base de datos CATALOGO, podemos conectarnos a la misma desde un script PHP para hacer las consultas que se desee, por ejemplo ver la lista de tems del catalogo en una pagina Web. Para esto usaremos el usuario de Web anteriormente creado. La conexin misma es muy sencilla son generalmente 3 lneas de cdigo en las que se especifica una conexin, el servidor al que uno se quiere conectar, el nombre de la base de datos a utilizar, y el usuario que se quiere conectar. Una conexin tpica es la siguiente:

La consulta SQL se almacena en la variable $query. Luego esta consulta es ejecutada con el comando mysql_query(). A continuacin el cdigo completo del script pronuevos.php. Desplegar la lista: SELECT. Para desplegar la lista los pasos son los siguientes: 1. Hacer el query a la tabla lista de la base de datos guia. 2. Desplegar los resultados en una tabla poniendo en cada fila links de eliminar y actualizar subscriptor. 1. EL cdigo PHP pata la consulta es el siguiente:

telefono

2. Para desplegar la lista se debe mezclar cdigo PHP con HTML con el objetivo degenerar mediante PHP una fila de la tabla para cada subscriptor.