FACENA
UNNE
Taller de Programación I
Teoría
Facultad de Ciencias Exactas y Naturales y Agrimensura-
UNNE Desarrollo de Aplicaciones Web. Año 2012
Expto. Oscar Zalazar - Lic. Lucía Salazar - Expto. Pedro L. Alfonzo - Lic. Yanina Medina - Osvaldo P. Quintana
Taller de Programación I FACENA – UNNE Teoría
Facultad de Ciencias Exactas y Naturales y Agrimensura
1
Tema 9: Acceso a bases de datos MySQL en PHP
9.1.- Concepto.
- 9.1.2. Base de Datos en la Web.
- 9.1.3. La base de datos MySQL.
- 9.1.4. Base de datos relacionales.
9.2.- Lenguaje SQL.
9.2.1.- Consultas estructurales.
9.2.2.- Tipos de datos.
9.2.3.- Atributos.
9.2.4.- Consultas de Manipulación de Datos
9.2.4.1- Sentencia INSERT INTO
9.2.4.2.- Sentencia SELECT
9.2.4.3.- Sentencia UPDATE
9.2.4.4.- Sentencia DELETE
9.3.- PHP y MySQL
9.3.1.- PhpmyAdmin.
9.3.2.-Comunicación entre PHP y MySql.
9.3.4.-Conexión.
Taller de Programación I FACENA – UNNE Teoría
Facultad de Ciencias Exactas y Naturales y Agrimensura
2
9.1.1. Concepto:
Una Base de Datos es una colección de datos relacionados o bien estructura donde se almacena
información siguiendo pautas de disposición y ordenación, o bien, una Base de Datos es una
colección de datos organizados de tal manera que se pueda encontrar información cuando sea
necesaria, pueden ser simples y pequeñas o complejas y muy grandes.
Técnicamente el término Base de Datos, se refiere al archivo o grupo de archivos que
contienen datos reales.
Las Bases de Datos permiten acceder a datos sin necesidad de recorrer toda la Base de Datos
para encontrar el dato buscado.
El acceso a la Base de Datos es mediante un conjunto de programas llamado Sistema
Administrador de Base de Datos (DBMS: Database Management System). Actualmente la
mayoría de los DBMS son sistemas Administradores de Bases de Datos relacionales
(RDBMSs: Relational Database Management Systems) donde los datos se organiza y almacena
en tablas relacionadas.
Uno de los puntos fuertes de PHP es que ofrece soporte para diferentes tipos de DBMS (Ej.
IBM, DB2, INFORMIX, MICROSOFT, SQL SERVER, MS SQL, ORACLE, POSTGRE
SQL).
Adicionalmente PHP también ofrece soporte para el estándar ODBC (Open Database
Connectivity). El objetivo de ODBC es hacer posible el acceder a cualquier dato desde
cualquier aplicación, sin importar que DBMS almacene los Datos; se necesita tener instalado
un driver ODBC.
Luego de tener instalado el RDBMS a utilizar e instalarlo, es necesario conocer como diseñar y
crear la Base de Datos a la cual se accederá de los scripts de PHP.
9.1.2. Base de Datos en la Web
Las bases de datos permiten almacenar de una forma estructurada y eficiente toda la
información de un sitio web.
Ventajas:
Proporcionar información actualizada
Facilitar la realización de búsquedas
Disminuir los costes de mantenimiento
Implementar sistemas de control de acceso
Taller de Programación I FACENA – UNNE Teoría
Facultad de Ciencias Exactas y Naturales y Agrimensura
3
Almacenar preferencias de los usuarios
Esquema básico de un sitio web soportado por bases de datos:
En este esquema se observa que cuando un usuario desde su navegador (maquina del cliente)
hace clic sobre un enlace correspondiente a un documento HTML que incluye código PHP, el
navegador realiza la solicitud al servidor web correspondiente. El servidor Web llama al
intérprete de PHP si es necesario, PHP ejecuta los scripts interactuando con la base de datos (a
través de su gestor de base de datos que puede ser PHPMyAdmin) y devuelve al servidor el
documento generado en formato HTML, el documento es interpretado por el navegador se
ejecutan los scripts del lado del cliente y se presenta el resultado en la maquina del cliente.
9.1.3. La base de datos MySQL
Dentro de las múltiples posibilidades que los sitios Web dinámicos ofrecen al usuario está la
obtención de información almacenada en una base de datos en el servidor.
Suponga que se quiere escribir una página desde el cual el usuario pueda obtener los
resultados de los eventos deportivos que se celebran en su ciudad. Se tendrá una base de datos
donde almacenará los resultados de encuentros de fútbol, partidos de tenis, combates de boxeo,
carreras de caballos, etc. Su página dinámica recibirá la solicitud del cliente sobre un
determinado deporte, buscará esta información en la base de datos y se la servirá al cliente. En
el mercado existen diversos sistemas de bases de datos. Nosotros hemos elegido para este caso
MySQL, por varias razones. Por una parte, es gratuito (aunque también existen licencias
comerciales). Por otra parte, los datos se almacenan en archivos que tienen un tamaño mucho
menor que otras bases de datos. Además, el motor de datos de MySQL es mucho más rápido,
Taller de Programación I FACENA – UNNE Teoría
Facultad de Ciencias Exactas y Naturales y Agrimensura
4
tanto grabando datos como localizándolos y recuperándolos, que el de otras bases de datos. Eso
sin contar con que MySQL ofrece una gran seguridad sobre la integridad de los datos
almacenados. El software open source es gratis y por otra parte los programas de tecnología
abierta son tan eficientes y seguros como los programas que no son gratuitos.
9.1.4. Bases de Datos relacionales.
Las Base de Datos relacionales, permiten establecer relaciones entre los distintos datos que
componen la misma. Una base de datos relacional está compuesta de relaciones que se llaman
tablas.
En una base de datos la información se almacena en TABLAS (entidades) cada TABLA está
formada por FILAS (Instancias) llamadas también REGISTROS. Cada registro esta divido en
CAMPOS (atributos) que forman columnas. Cada campo contiene un DATO y todos los
campos de una columna tienen la misma estructura, es decir que en todos ellos se almacena un
dato del mismo tipo tamaño máximo etc.
Cuando se crea una tabla cada columna tiene un nombre de campo, por ejemplo para una tabla
“Clientes”, los campos serian: Nombre, Apellido, Domicilio, Teléfono.
Nombre Apellido Domicilio Teléfono
Juan Jose Perez Chaco 1546 379-4458263
Dentro de cada una de las tablas es conveniente aunque no obligatorio crear un campo clave. El
cual sirve de referencia para localizar el registro como se observa en el siguiente ejemplo.
Las Base de datos relacionales son el tipo de Base de Datos más comúnmente utilizados y para
ello es necesario conocer algunos conceptos como: Tablas, Columnas, Filas, Valores, Claves,
esquemas y Relaciones.
¬ Las tablas: tienen un nombre, un número de columnas, cada una corresponde a una
pieza de dato (campo o atributo).
¬ Columnas: cada columna en la tabla tiene un nombre único y contiene distintos tipos
de datos. Adicionalmente cada columna tiene asociado un tipo de dato.
¬ Filas: cada fila en la tabla representa un registro, cada fila tiene los mismos atributos.
Taller de Programación I FACENA – UNNE Teoría
Facultad de Ciencias Exactas y Naturales y Agrimensura
5
¬ Valores: cada fila se corresponde de un conjunto de valores individuales que
corresponden a las columnas. Cada valor tiene el tipo de datos especificado por su
columna.
¬ Claves: cada registro en una tabla se debe identificar unívocamente, la columna que
identifica al registro en la tabla se llama clave o clave primaria. La clave también
puede ser compuesta.
Las Bases de Datos, en general están compuestas por múltiples tablas y utilizan una
clave como referencia de una tabla a otra (Figura 2).
El término para el tipo de relaciones es clave foránea.
Ejemplo (Figura 1) tabla CLIENTES
CLIENTES
Cliente_id Nombre Dirección Ciudad
1 Gabriel Pasaje Cruz 12310 Corrientes
2 Miguel San Juan 1525 Misiones
3 Julio San Lorenzo 1544 Corrientes
Figura 1: TABLA DE datos CLIENTES
ARTICULOS
Articulo_id Cliente_id Cantidad Fecha
1 3 25 2011-10-02
2 2 18 2011-08-5
3 1 15 2011-05-22
Figura 2: Clave Primaria y Clave Foránea
¬ Esquema: es el conjunto completo de tablas para una Base de Datos. El esquema puede
representarse con diagramas informales, modelo entidad-relación como texto.
¬ Relaciones: existen 3 tipos de relaciones:-----a) Relación uno a uno
-----b) Relación uno a muchos
-----c) Relación muchos a muchos
Taller de Programación I FACENA – UNNE Teoría
Facultad de Ciencias Exactas y Naturales y Agrimensura
6
a) Relación uno a uno: significa que una fila en una tabla se relaciona con una sola fila en
otra tabla y viceversa.
b) Relación uno a muchos: una fila en una tabla se relaciona con muchas filas en otra. La
tabla que tiene varios registros tiene una clave foránea hacia la tabla con un registro.
c) Relación muchos a muchos: muchas filas de una tabla se relacionan con muchas filas
de otra tabla. En este tipo de relaciones se utiliza una tercer tabla que contiene las
claves de las otras dos tablas como claves foráneas.
Una de las ventajas de los RDBMS (Sistema administrador de Base de Datos Relacionales) es
la seguridad de los Datos ya que no permite a cualquiera almacenar y obtener datos pues es
necesaria una cuenta de usuario para utilizarlo.
Una vez diseñada la Base de Datos se puede almacenar, actualizar y recuperar los datos, PHP
hace de esto una tarea sencilla
9.2.- Lenguaje SQL (Structured Query Languaje).
Es un lenguaje estándar para manipular sistemas de base de datos relacionales (RDBMSs).
Se utiliza para almacenar y recuperar datos desde una Base de datos y se integra muy bien a los
lenguajes de programación modernos, tiene relativamente pocas instrucciones y es muy facil de
aprender a manejar con soltura. Por ejemplo SQL, no puede mostrar un registro de una Base
de Datos en una página WEB pero si puede recuperar el contenido del registro y cedérselo al
Script PHP, que es el que se encargará de darle el formato adecuado y mostrarlo en un
documento HTML al usuario.
Es utilizado en sistemas de bases de datos tales como: MYSQL, ORACLE, POSTGRE SQL
MS SQL SERVER, entre otros.
Hay un estándar de ANSI para SQL, y los Sistemas de Base de Datos como MySql
generalmente luchan para implementar este estándar. Existen algunas diferencias entre el
estándar SQL y MySQL.
Las instrucciones de SQL, llamadas genéricamente consultas, se pueden considerar divididas
en 2 grupos.
A) Las estructurales, también llamadas de definición de datos DDL (Data definition
Languaje) o definición de datos del lenguaje: permite a los usuarios de la base de datos
Taller de Programación I FACENA – UNNE Teoría
Facultad de Ciencias Exactas y Naturales y Agrimensura
7
llevar a cabo las tareas de definición de las estructuras que almacenarán los datos así
como de los procedimientos o funciones que permiten consultarlos. Están destinadas a
crear, modificar y eliminar la Base de Datos) y las estructuras de las tablas así como los
índices.
B) La de manipulación de datos DML (Data Manipulation Languaje) o lenguaje de
manipulación de datos, es un lenguaje proporcionado por el Sistema de gestión de Base
de Datos que permite a los usuarios de la misma llevar a cabo las tareas de consulta o
manipulación de datos organizados, por el modelo de datos adecuado. Estas
instrucciones se ocupan de incorporar nuevos registros a las tablas según los criterios
necesarios, buscar nuevo registro, modificar los datos y grabarlos o eliminarlos.
La mayoría de las acciones que se necesitan realizar sobre una base de datos se hacen con
sentencias SQL.
Las sentencias para definición de datos del lenguaje (DDL) son:
- CREATE DATABASE
- ALTER DATABASE
- CREATE TABLE
- ALTER TABLE
- DROP TABLE
- CREATE INDEX
- DROP INDEX
Las sentencias para Manipulación de datos del lenguaje (DML) son:
- SELECT
- UPDATE
- DELETE
- INSERTO INTO
9.2.1. Consultas estructurales:
Lo primero que hacemos para gestionar (administrar) una base de datos es crearla, las
instrucciones SQL para realizar esto son llamadas genéricamente consulta. Para crear
realizamos la consulta CREATE DATABASE.
Ej CREATE DATABASE IF NOT EXISTS CLIENTES; //(creamos la base de datos
clientes).
Taller de Programación I FACENA – UNNE Teoría
Facultad de Ciencias Exactas y Naturales y Agrimensura
8
Todas las consultas SQL al igual que las de PHP deben terminar con punto y coma. La clausula
IF NOT EXISTS es opcional pero si la Base de Datos ya existe se producirá un error. La Base
de Datos recién creada (CLIENTES) es solo un contenedor donde se guardaran los datos. Pero
sin las tablas la Base de Datos no permite guardar nada.
consulta SQL para crear una tabla: CREATE TABLE `clientes` ( `id_clientes` INT NOT NULL AUTO_INCREMENT , `nombre_clientes` VARCHAR( 50 ) NOT NULL , `apellido_clientes` VARCHAR( 50 ) NOT NULL , `ciudad_clientes` CHAR( 30 ) NOT NULL , `telefono_cliente` TINYINT( 15 ) NOT NULL , PRIMARY KEY ( `id_clientes` ) ) TYPE = MYISAM ;
En este ejemplo hemos creado la tabla clientes, usando CREATE TABLE seguido del nombre
de la tabla que queremos crear, entre paréntesis aparece la definición de los campos que tendrá
la tabla, separadas cada uno del siguiente por una coma. Cada campo se crea anotando su
nombre seguido del tipo de dato que se almacenara.
En el ejemplo de creación de la tabla clientes, hemos definido datos del tipo CHAR Y
VARCHAR, los cuales se usan para almacenar cadenas alfanuméricas y van seguidos de un
número entre paréntesis. En el caso de CHAR, este número indica la cantidad de caracteres
que se reservan para la cadena. Si el dato introducido tiene menos caracteres, el campo seguirá
ocupando lo mismo en el disco, si se empleara VARCHAR y el dato introducido ocupa
menos caracteres de los que se reservaron, ese campo en ese registro concreto ocupa menos,
tantos bytes como caracteres tenga la cadena grabada.
Al final de la definición de la estructura de la tabla clientes, que hemos visto aparecen dos
clausulas, en primer lugar tenemos PRIMARY KEY (id_cliente) nos indica que es una clave
primaria. La cual la hemos definido como autoincremental.
Otra clausula a la que tenemos que prestar atención es la siguiente: TYPE = MYISAM, el tipo
de tabla se refiere a la forma en que el motor de Base de Datos va a gestionarla. Esto es
transparente al usuario. Las alternativas a MyISAM son ISAM Y HEAP. Cuando emplee
MYSQL use siempre el tipo MyISAM, que es el menos restrictivo y más eficiente.
Como es lógico, si se desea se puede eliminar una tabla de la Base de Datos con la que estamos
trabajando. Para ello emplearemos la consulta DROP TABLE.
Taller de Programación I FACENA – UNNE Teoría
Facultad de Ciencias Exactas y Naturales y Agrimensura
9
Ejemplo: DROP TABLE IF EXITS nombre de la tabla;
Nota: Se debe tener cuidado ya que la eliminación de una tabla es irreversible. Se pierde
todo: estructura y datos.
El lenguaje SQL permite la creación de índices que el motor de Base de datos usara para
agilizar la búsqueda de registros, mediante la consulta CREATE INDEX.
Ej: CREATE INDEX índice ON tabla (campo);
Para eliminar un índice: DROP INDEX índice;
La estructura de una tabla puede ser modificada si es necesario mediante la consulta ALTER
TABLE, cuya sintaxis genérica es la siguiente:
ALTER TABLE tabla
ADD campo definicióndelcampo
CHANGE campoantiguo camponuevo definiciondelcampo, DROP campo;
(Mediante la clausula ADD añadimos un nuevo campo, cambiamos el nombre y la definición
de campos ya existentes mediante la clausula CHANGE, o eliminar campos mediante la
cláusula DROP).
9.2.2. Tipos de Datos:
Los tipos de datos que se puede manejar desde SQL son los siguientes:
TIPOS DE DATOS SQL
TIPO DESCRIPCION
TNTYINT Entero 0 a 255 sin signo o de 128 a 127 con signo.
SMALLINT Entero de 0 a 65.535 sin signo, o de 32.768 a 32.767 con signo.
MEDIUMINT Entero de 0 a 16.777.215 sin signo o de -8.388.608 a 8.388.607 con signo.
INT Entero de 0 a 4.294.967.295 sin signo o de -2.147.483.648 a 2.147.483.647 con signo.
BEGINT Entero de 0 a 18.446.744.073.709.551.616 sin signo o desde el negativo -9.223.372.036.854.775.807 con signo.
FLOAT (M,D) Numero con coma flotante de simple precisión. M es la cantidad máxima de dígitos, sin contar el signo ni el punto decimal. D es el número de dígitos decimales.
DOUBLE (M,D) Numero en coma flotante de doble precisión. M y D como en el caso anterior.
DATE Fecha en formato HH:MM:SS, o bien HHMMSS o HHMM.
DATETIME Fecha y hora en formato AAAA-MM-DD HH:MM:SS.
TIME Hora en formato HH:MM:SS, o bien HHMMSS o HHMM.
CHAR (N) Cadena de n caracteres. Se reservan n caracteres, aunque el dato que luego se grave ocupe menos. .
VARCHAR (N) Cadena de longitud variable, se reservan n caracteres, pero si el dato ocupa menos, se
Taller de Programación I FACENA – UNNE Teoría
Facultad de Ciencias Exactas y Naturales y Agrimensura
10
reduce su longitud.
TNTYTEXT Texto plano con máximo de 255 caracteres
TEXT Texto plano con un máximo de 65.535 caracteres.
MEDIUMTEXT Texto plano con un máximo de 16.777.215 caracteres.
LONGTEXT Texto plano con un máximo de 4.294.967.295 caracteres.
TINYBLOB Archivo binario (puede ser texto RTF, imágenes, etc. con un máximo de 255 bytes)
BLOB Archivo binario con un máximo de 65.535 bytes.
MEDIUMBLOB Archivo binario con un máximo de 16.777.215 bytes.
LONGBLOB Archivo binario con un máximo de 4.294.967.295 bytes
ENUM (‘V1’, ‘V2, ETC.)
Campo que acepta cualquiera de los posibles valores enumerados entre paréntesis.
DECIMAL (M,D) Número guardado como cadena alfanumérica. M y D como en el caso anterior.
9.2.3.- Atributos:
ATRIBUTOS DE DATOS SQL
ATRIBUTO DESCRIPCION
NULL Indica que el campo podrá quedar sin ningún contenido cuando se cree un registro, o cuando modifique uno ya existente.
NOT NULL Indica que este campo debe tener asignado un contenido obligatoriamente en cada registro. Si se intenta dejar sin contenido se producirá un error.
DEFAULT Valor
Indica el valor que el campo asumirá por defecto. Cuando se cree un nuevo registro de la tabla en el campo se almacenará, de forma automática, el valor establecido por defecto, aunque, por supuesto, si se especifica otro valor se grabará el especificado. Si el campo es numérico, se escribirá el valor, sin más. Si el campo es alfanumérico se acotará con comillas simples
ZEROFILL Este atributo se aplica a campos numéricos cuando queremos que se rellenen con ceros los dígitos de más. Por ejemplo, si se reserva en un campo FLOAT sitio para cuatro dígitos y se almacena el valor 867, quedará como 0867
UNIQUE
Se utiliza cuando queremos que no se pueda repetir el valor de un campo en otro registro. Por ejemplo, si creamos una tabla personal y uno de los capos es el DNI de cada persona, es lógico que no pueda haber dos personas con el mismo número de documento. Si se intenta asignar un valor a ese campo, que ya exista en otro registro, se producirá un error. Hay que indicar que MySQL no reconoce este atributo. Lo ignora, sin dar ningún error, por razones de compatibilidad, pero no lo tiene en cuenta.
UNSIGNED Este atributo, aplicado a campos numéricos, hace que el motor de la base de datos genere un error si se intenta introducir un valor con signo, lo que, en la práctica impide el uso de valores negativos.
AUTO_INCREMENT
Este atributo se asigna a un campo numérico cuando deseamos que se incremente de forma automática. Es decir cada nuevo registro que se cree almacenará, en dicho campo, un valor que sea una unidad más que el anterior. Si elimina un registro, el valor que tenía en ese campo no se le volverá a asignar a ningún otro.
PRIMARY KEY Este atributo define un campo como clave primaria. Esto hace que en dicho campo no pueda haber valores repetidos, lo que en la práctica, sustituye al atributo UNIQUE en aquellos motores de BBDD que no lo utilizan como es el caso de MYSQL.
Taller de Programación I FACENA – UNNE Teoría
Facultad de Ciencias Exactas y Naturales y Agrimensura
11
9.2.4.- Consultas de Manipulación de Datos:
9.2.4.1.- Sentencia INSERT INTO
Para añadir registros, SELECT para localizar registros, UPDATE para actualizar registros y
DELETE para eliminar registros.
INSERT INTO: se utiliza para insertar una nueva fila en una tabla. Es posible escribir la
instrucción INSERT INTO en 2 formas.
La primera forma no especifica los nombres de la columna en que los datos se insertan, solo
sus valores:
INSERT INTO tabla VALUES (valor_1, valor_2, valor_3,….);
La segunda forma específica tanto los nombres de las columnas y valores que se insertan
INSERT INTO tabla (columna_1, columna_2,) VALUES (valor_1, valor_2,…);
9.2.4.2.- Sentencia SELECT:
Se utiliza para localizar registros dentro de una tabla determinada.
SELECT (campo_1, campo_2,… campo_n) FROM tabla WHERE condición;
Esto recupera los campos especificados de la tabla indicada para aquellos registros que
cumplan la condición. Por ejemplo: SELECT nombre, apellido FROM clientes
WHERE ciudad = “corrientes”;
Con esta consulta conseguiremos el nombre y apellido de los clientes que son de la ciudad de
corrientes.
Si queremos recuperar todos los datos de los registros que cumplan la condición la consulta
será: SELECT * FROM clientes WHERE ciudad = “corrientes”;
La clausula WHERE permite establecer condiciones de selección de registros, es
especialmente potente y flexible.
Clausula GROUP BY, permite agrupar registros según ciertos criterios, la consulta seria:
SELECT nombre, apellido FROM clientes GROUP BY ciudad;
Con esto tendremos el nombre y apellido de los clientes agrupados por ciudad.
Taller de Programación I FACENA – UNNE Teoría
Facultad de Ciencias Exactas y Naturales y Agrimensura
12
Clausula LIKE, podemos establecer una condición basada en similitudes no exactas. Esto
quiere decir que podemos crear un cierto criterio sobre patrones. Esta palabra LIKE es un
comparativo que se refiere a la similitud entre dos cosas.
Por ejemplo supongamos que queremos ver la lista con todos los datos de los clientes cuyo
nombre es “julio” la consulta sería la siguiente.
SELECT * FROM clientes WHERE nombre LIKE “julio”;
Como hemos mencionado la clausula WHERE es muy flexible y operadores como LIKE le
dan más potencia.
Podemos usar operadores para encadenar varias condiciones bajo una sola clausula WHERE.
En SQL consideramos dos tipos de operadores: los aritméticos y los lógicos, los cuales
combinados tienen mucha potencia para el procesamiento de datos.
OPERADORES DE LA CLAUSULA WHERE (aritméticos)
OPERADOR DESCRIPCION
> Mayor que.
< Menor que.
= Igual a.
<= Menor o igual que.
>= Mayor o igual que.
<> Distinto de.
LIKE Parecido a.
BETWEEN Comprendido entre dos valores
IN Se usa para hacer una consulta en una tabla que está en otra Base de datos distinta de la que estamos usando.
OPERADORES DE LA CLAUSULA WHERE (lógicos)
OPERADOR DESCRIPCION
AND Une dos condiciones. Deben cumplirse ambas.
OR Une dos condiciones de modo que seleccionará los registros que cumplan, al menos una de ellas.
NOT Selecciona los registros que no cumplen la condición.
Taller de Programación I FACENA – UNNE Teoría
Facultad de Ciencias Exactas y Naturales y Agrimensura
13
UNIONES:
Se utilizan para consultar los datos de dos o más tablas sobre la base de una relación entre
ciertas columnas en estas tablas:
JOIN
ALEFT JOIN
RIGHT JOIN
FULL JOIN
La palabra clave INNER JOIN devuelve las filas para las cuales hay al menos una
coincidencia en ambas tablas.
SELECT columnas(s) FROM tabla1
INNER JOIN (tabla2) ON (tabla1.columna=tabla2.columna);
La palabra LEFT JOIN devuelve todas las filas de la tabla de la izquierda (tabla1), incluso si
no hay coincidencias en la tabla a la derecha (tabla2).
SELECT columna(s) FROM tabla1
LEFT JOIN (tabla2) ON (tabla1.column=tabla2.columna);
La palabra RIGHT JOIN devuelve todas las filas de la tabla de la derecha (tabla2), incluso si
no hay coincidencias en la tabla de la izquierda (tabla1).
SELECT columna(s) FROM tabla1
RIGHT JOIN (tabla2) ON (tabla1.columna=tabla2.columna);
La palabra FULL JOIN devuelve filas cuando hay una coincidencia en una de las tablas.
SELECT columna(s) FROM tabla1
FULL JOIN (tabla2) ON (tabla1.columna=tabla2.columna);
FUNCIONES DE AGRUPADO:
Devuelve un valor único, calculado a partir de valores de una columna:
AVG( ) : devuelve el valor promedio de 1 columna numerica
SELECT AVG (columna) FROM tabla;
COUNT( ): devuelve el numero de filas que coinciden con un criterio especifico.
SELECT COUNT (columna) FROM tabla;
FIRST( ): devuelve el primer valor de la columna seleccionada.
SELECT FIRST (columna) FROM tabla;
LAST( ) devuelve el ultimo valor de la columna seleccionada.
SELECT LAST (columna) FROM tabla;
MAX( ): Devuelve el mayor valor de la columna seleccionada
SELECT MAX (columna) FROM tabla;
Taller de Programación I FACENA – UNNE Teoría
Facultad de Ciencias Exactas y Naturales y Agrimensura
14
MIN( ): Devuelve el menor valor de la columna seleccionada.
SELECT MIN (columna) FROM tabla;
SUM( ): Devuelve la suma total de una columna numérica.
SELECT SUM (columna) FROM tabla;
Sentencia GROUP BY: se utiliza en conjunción con las funciones de agregado para agrupar el
conjunto de resultados por una o más columnas.
SELECT columna,
funcion(columna) FROM tabla
WHERE columna operador valor
GROUP BY columna;
CLAUSULA HAVING: Se añadió a SQL puesto que la clausula WHERE no se puede utilizar
con funciones de agregado.
FUNCIONES DE FECHA Y HORA:
NOW( ): fecha y hora actual
CURDATE( ): fecha actual
CURTIME( ) hora actual
MySQL viene con los siguientes tipos de datos para almacenar una fecha o valor de fecha/hora
en la Base de datos:
DATE formato YYY-MM-DD
DATETIME formato YYY-MM-DD HH:MM:SS
TIMESTAMP formato YYY-MM-DD HH:MM:SS
YEAR formato YYY o YY
Sub-Consultas: Una sub-consulta es una sentencia SELECT dentro de otra sentencia SELECT
SELECT * FROM tabla1 WHERE columna1= (SELECT columna1 FROM tabla2);
La Sub-consulta esta anidada dentro de la consulta exterior:
- Es posible anidar sub-consultas dentro de otras Sub-consultas hasta una profundidad
considerable.
- Una Sub-consulta debe siempre aparecer entre paréntesis.
Las principales ventajas de las Sub-Consultas son:
- Permiten consultas estructuradas de forma que es posible aislar cada parte de un
comando.
- Proporcionan un modo alternativo de realizar operaciones que de otro modo
necesitarían JOINS y uniones complejas.
Taller de Programación I FACENA – UNNE Teoría
Facultad de Ciencias Exactas y Naturales y Agrimensura
15
9.2.4.3.- Sentencia UPDATE:
Se utiliza para actualizar los registros existentes en una tabla
UPDATE tabla
SET (columna_1= valor_1, columna_2=valor_2)
WHERE columna=valor;
La clausula WHERE especifica que registro o registros deben ser actualizados. Si se omite,
todos los registros serán actualizados.
9.2.4.4.- Sentencia DELETE:
Se utiliza para eliminar filas de una tabla
DELETE FROM tabla
WHERE columna = valor;
La clausula WHERE especifica que registro o registros deben ser eliminados. Si se omite,
todos los registros serán eliminados.
ALIAS: se puede dar a una tabla o a una columna otro nombre mediante el uso de un alias. Es
útil cuando se tienen nombres de tablas o columnas muy largos o complejos.
SELECT columna(s)
FROM tabla AS alias
9.3.- PHP y MySQL
En este apartado solo nos vamos a centrar en el uso de php con mysql, ya que sql es un
lenguaje en particular, y muy generalizado. Normalmente, para la administración de bases de
datos mysql, se usa PhpMyAdmin, una interfaz muy amigable con la que se puede manejar
las bases de datos.
9.3.1.- PhpMyAdmin
Las formas básicas para trabajar con MySql son:
- El cliente de la línea de comando (proporcionado por MySQL). (Figura 3)
- El cliente basado en Web (phpMyadmin se instala con el paquete XAMPP). Figura 4
Taller de Programación I FACENA – UNNE Teoría
Facultad de Ciencias Exactas y Naturales y Agrimensura
16
Figura 3: Cliente de línea de comando MySQL
Figura 4: Cliente basado en WEB phpMyAdmin
PhpMyadmin: Es una herramienta de software libre (incluida en el paquete XAMPP) y
escrita en PHP, destinada al manejo y administración de MySql sobre la Web.
- Soporta un amplio rango de operaciones con MySql.
Las operaciones utilizadas con mayor frecuencia, están soportadas por la interfaz del
usuario. Administración de bases de datos, Tablas, Campos, Relaciones, Índices,
Permisos de usuario. Capacidad de ejecutar cualquier sentencia SQL.
Taller de Programación I FACENA – UNNE Teoría
Facultad de Ciencias Exactas y Naturales y Agrimensura
17
9.3.2.- Comunicación en PHP y MySql:
Cualquiera sea la manera de trabajar para conectar PHP con MySql el proceso siempre sigue la
secuencia:
- Conectar con MySql para lo cual es necesario proporcionar el Host, el usuario y la
contraseña.
- Seleccionar la Base de datos con la que se quiere trabajar.
- Preparar la consulta SQL.
- Ejecutar la consulta y recuperar el resultado.
- Extraer los datos del resultado de la consulta y mostrarlos (en general mediante una
iteración).
- Liberar la conexión.
9.3.3.- Conexión
Lo primero que se debe realizar siempre, es la conexión de php con mysql. La función que se
utiliza es mysql_connect la cual conecta el programa PHP con el gestor de base de datos que
contiene la base de datos con la que se desea trabajar. El primer parámetro (servidor) contiene
el nombre DNS del servidor que almacena la base de datos y el puerto por el que el servidor
mysql escucha las peticiones de consulta. El parámetro usuario contiene el nombre de usuario
con el que se va a acceder al servidor y el parámetro password contiene la contraseña de
autenticación del usuario sin cifrar. Si la función se ejecuta correctamente, devuelve un
descriptor de conexión que se utilizará en las funciones de acceso al servidor. Si, por cualquier
razón, no se puede realizar la conexión, devuelve el valor booleano false.
La sintaxis es: mysql_connect (string servidor, string user, string passwd) Aquí un ejemplo:
<?php $dbhost = "localhost"; $dbuser = "root"; $dbpass = "books"; $conx = mysql_connect($dbhost, $dbuser, $dbpass); ?>
En las variables dbhost, dbuser, y dbpass, definimos el servidor, el usuario y la clave de nuestro
servidor mysql, y en la variable $conx, creamos la variable de conexión.
La función mysql_close cierra una conexión con un servidor MySQL que se ha abierto
invocando a mysql_connect( ) . Si la funcion se ejecuta correctamente devuelve el valor
booleano true y si se produce algún error, devuelve el valor false.
La sintaxis es: mysql_close (descriptor mydb)
Taller de Programación I FACENA – UNNE Teoría
Facultad de Ciencias Exactas y Naturales y Agrimensura
18
A continuación se muestra un ejemplo de conexión y el script finaliza cerrando la conexión
abierta invocando a mysql_close( ). <?php $dbhost = "localhost"; $dbuser = "root"; $dbpass = "mysql"; $conx = mysql_connect($dbhost, $dbuser, $dbpass); If (!$conx) die (“No se puede conectar al servidor”); // die es un alias de exit mysql_close($conx); ?>
A continuación, tenemos que seleccionar, dentro del servidor, la base de datos que queremos
usar. Para lo cual se utiliza la función mysql_selected_db( ), la cual toma un argumento que es
nombre de la base de datos a utilizar, la cual retorna TRUE o FALSE según si se conecto con
éxito o no.
Aquí un ejemplo: en donde se realiza la conexión con el servidor Mysql y se selecciona la base
de datos alumnos.
<?php
$dbhost = "localhost";
$dbuser = "Mysql";
$dbpass = "";
$conx = mysql_connect($dbhost, $dbuser, $dbpass);
$db=mysql_select_db('alumnos');
if(!$conx=mysql_connect($dbhost,$dbuser,"")){
die("Error al Tratar De Conectar");
}
if(!mysql_select_db("alumnos")){
die ("Error al Tratar De Conectar Con La Base De Datos");
}
?>
La funcion mysql_select_db selecciona una base de datos almacenada en el gestor Mysql,
sobre el que se habrá realizado una conexión previa invocando a mysql_connect.
La sintaxis es: $db = mysql_select_db(string bdatos);//
Preparar la consulta SQL
Enviar la instrucción SQL a la base de datos: mysql_query()
◦ Devuelve un identificador o true (dependiendo de la instrucción) si la
instrucción se ejecuta correctamente y false en caso contrario.
Sintaxis: $consulta = mysql_query (instrucción, $conexion);
Ejemplo:$consulta=mysql_query (“select * from alumnos”, $conexion)
or die (“Fallo en la consulta”);
La consulta es un string:
Taller de Programación I FACENA – UNNE Teoría
Facultad de Ciencias Exactas y Naturales y Agrimensura
19
Por ejemplo:
$ query= “SELECT usuario, password FROM usuarios
WHERE usuario=´juan´ AND password = ´juan08´”;
Los datos insertados dentro de la consulta deberían estar correctamente conectados.
Enviar una consulta MySql:
Se utiliza la función mysql_query( ), la cual envía una única consulta ya que múltiples
consultas no están soportadas a la base de datos actualmente activa en el servidor asociado con
el identificador de la conexión.
El conjunto de resultados devuelto, se pasa a una función que maneje el resultado de las tablas
y y el acceso a los datos retornados.
Ejemplo: $result = mysql_query($query);
Ejecutar la consulta y recupera el resultado: para ello existen varias funciones:
a) mysql_fetch_array( )
b) mysql_fetch_assoc( )
c) mysql_fetch_row( )
Es importante tener en cuenta que mysql_fetch_array( ) no es significativamente más lenta que
mysql_fetch_row( ), sin embargo provee un valor añadido importante.
a) mysql_fetch_array(): recupera una fila de resultado como un array asociativo, un array
numérico o como ambos y devuelve un array de cadena que corresponde a la fila
recuperada, si no hay filas devuelve FALSE.
El tipo de array a ser devuelto depende de una constante:
MYSQL_ASSOC : un array asociativo con índices asociativos.
MYSQL_NUM : un array con índices numéricos.
MYSQL_BOTH : un array con ambos índices asociativos y numéricos.
b)mysql_fetch assoc(): recupera una fila de resultado como un array asociativo, devuelve un
array asociativo de cadenas que corresponde a la fila recuperada o FALSE si no hay mas filas.
Ejemplo: $row = mysql_fetch_assoc($result);
print_r($row);
echo $row[´nombre´];
c) mysql_fetch_row(): recupera una fila de resultado como un array numerico y retorna un array
numérico de cadenas que corresponde a la fila recuperada y si no hay filas devuelve false.
Ejemplo: $row = mysql_fetch_array ($result, mysql_BOTH);
Print_r($row);
Taller de Programación I FACENA – UNNE Teoría
Facultad de Ciencias Exactas y Naturales y Agrimensura
20
Echo $row[´nombre´];
Echo $row[0];
Obtener y procesar los resultados: mysql_num_rows(), mysql_fetch_array()
◦ En el caso de que la instrucción enviada produzca unos resultados,
mysql_query() devuelve las filas de la tabla afectadas por la instrucción
◦ mysql_num_rows() devuelve el número de filas afectadas
◦ Para obtener las distintas filas del resultado se utiliza la función
mysql_fetch_array(), que obtiene una fila del resultado en un array asociativo
cada vez que se invoca
Sintaxis: $nfilas = mysql_num_rows ($consulta);
$fila = mysql_fetch_array ($consulta);
Obtención de las filas:
$nfilas = mysql_num_rows ($consulta);
if ($nfilas > 0)
{
for ($i=0; $i<$nfilas; $i++)
{
$fila = mysql_fetch_array ($consulta);
// procesar fila i-ésima de los resultados
}
}
Obtener los resultados: mysql_num_rows(), mysql_fetch_array()
Para acceder a un campo determinado de una fila se usa la siguiente sintaxis:
$fila[“nombre_campo”] // por ser un array asociativo
$fila[i] // i=índice del campo desde 0
Ejemplo:
for ($i=0; $i<$nfilas; $i++)
{
$fila = mysql_fetch_array ($consulta);
echo “nombre: “ . $fila[“nombre”];
echo “apellido: “ . $fila[“apellido”];
}
Recuperar y mostrar el resultado en un loop:
Ejemplo: <?php
$conn = mysql_connect(´localhost´, ´root´, ´260381´);
$ db = mysql_selected_db(´clientes´);
$query = “SELECT nombre, apellido FROM clientes”;
$result = mysql_query($query);
Taller de Programación I FACENA – UNNE Teoría
Facultad de Ciencias Exactas y Naturales y Agrimensura
21
While ($row = mysql_fetch_array($result,MYSQL_BOTH))
{ echo $row[´nombre´];
echo $row[´apellido´];
}
mysql_close ($conn);
?>
Recuperar un número fijo de elementos de una tabla:
Se utiliza la opción LIMIT de la orden SELECT. Así, por ejemplo,
SELECT * from libros LIMIT 0, 5
recupera los 5 primeros elementos de la tabla. Y en general,
SELECT * from libros LIMIT $comienzo, $num
recupera $num elementos a partir de la posición $comienzo
La variable $num tendrá un valor constante (en este caso 5), mientras que la variable
$comienzo se incrementará o decrementará en 5 unidades al pasar a la página siguiente o
anterior.
Para ello se pasará la variable como parámetro en el enlace asociado al botón correspondiente
Por ejemplo, el código para el botón siguiente será:
"<A HREF='$PHP_SELF?comienzo=" . ($comienzo + $num) . "'>Siguiente</A>“
Habrá que comprobar previamente que el nuevo valor de comienzo es válido, es decir, que se
encuentra dentro de los límites de la tabla devuelta por la consulta
Recuperar los elementos de una tabla que cumplen una condición se utiliza la opción WHERE
de la orden SELECT. Por ejemplo,
SELECT * from noticias WHERE categoria=’ofertas’
recupera las noticias cuya categoría tiene el valor “ofertas”. Y en general,
SELECT * from noticias WHERE categoria =’$categoria’
recupera las noticias cuya categoría tiene el valor dado por la variable $categoria
La variable $categoria se obtendrá de un elemento SELECT
Liberar una conexión: La funcion mysql_close() cierra la conexión de Mysql, asociado con el
identificador de enlace específico, si el identificador de enlace no se especificó, el l ultimo
enlace abierto es usado.
Frecuentemente no es necesario liberar la conexión, los enlaces abiertos no continuos son
automáticamente cerrados al final de la ejecución del script.
Ejemplo: $dbc = mysql_close($conn);
Recommended