You are on page 1of 11

GUÍA DE LABORATORIO 7

“Conexión a la Base de Datos y Sentencias


SQL”
Universidad Nacional del Santa Laboratorio7-Conexiòn a la Base de Datos en PHP

LABORATORIO

Objetivo:

 Aplicación para conectar a la Base de Datos.


 Ejemplos de aplicación de sentencias SQL.
 Diseño de bases de datos.

Equipos, Materiales, Programas y Recursos:

 Sistema Operativo Windows.


 Navegador Web.
 Editor de texto.

Seguridad:

 Ubicar maletines y/o mochilas al final del laboratorio.


 No ingresar con líquidos ni comida al aula de laboratorio.
 Al culminar la sesión de laboratorio, apagar correctamente la computadora y el
monitor.

Preparación:

Los alumnos deberán realizar todos los ejercicios realizados y propuestos de esta guía de
laboratorio.

Procedimiento y Resultados:

EPISI Dra. Diana Cecilia Muñoz Casanova –dianauns@yahoo.es Pág. 2


Universidad Nacional del Santa Laboratorio7-Conexiòn a la Base de Datos en PHP

LABORATORIO

Ejemplo Nº 01 Ejemplo resumen de la extensión MySQLi


<?php
// Vamos a pasar una variable $_GET a nuestro ejemplo, en este caso es
// 'aid' para 'actor_id' de nuestra base de datos Sakila. Le vamos a asignar un
// valor predeterminado de 1, y a amoldarla a un integer para evitar inyecciones
// de SQL y/o problemas de seguridad relacionados. El manejo de todo esto va más
// allá del alcance de este sencillo ejemplo:
// http://example.org/script.php?aid=42

if (isset($_GET['aid']) && is_numeric($_GET['aid'])) {


$aid = (int) $_GET['aid'];
} else {
$aid = 1;
}

// Conectarse a y seleccionar una base de datos de MySQL llamada sakila


// Nombre de host: 127.0.0.1, nombre de usuario: tu_usuario, contraseña: tu_contraseña, bd: sakila
$mysqli = new mysqli('127.0.0.1', 'tu_usuario', 'tu_contraseña', 'sakila');

// ¡Oh, no! Existe un error 'connect_errno', fallando así el intento de conexión


if ($mysqli->connect_errno) {
// La conexión falló. ¿Que vamos a hacer?
// Se podría contactar con uno mismo (¿email?), registrar el error, mostrar una bonita página, etc
.
// No se debe revelar información delicada

// Probemos esto:
echo "Lo sentimos, este sitio web está experimentando problemas.";

// Algo que no se debería de hacer en un sitio público, aunque este ejemplo lo mostrará
// de todas formas, es imprimir información relacionada con errores de MySQL --
se podría registrar
echo "Error: Fallo al conectarse a MySQL debido a: \n";
echo "Errno: " . $mysqli->connect_errno . "\n";
echo "Error: " . $mysqli->connect_error . "\n";

// Podría ser conveniente mostrar algo interesante, aunque nosotros simplemente saldremos
exit;
}

// Realizar una consulta SQL


$sql = "SELECT actor_id, first_name, last_name FROM actor WHERE actor_id = $aid";
if (!$resultado = $mysqli->query($sql)) {
// ¡Oh, no! La consulta falló.
echo "Lo sentimos, este sitio web está experimentando problemas.";

// De nuevo, no hacer esto en un sitio público, aunque nosotros mostraremos


// cómo obtener información del error
echo "Error: La ejecución de la consulta falló debido a: \n";
echo "Query: " . $sql . "\n";
echo "Errno: " . $mysqli->errno . "\n";
echo "Error: " . $mysqli->error . "\n";
exit;

EPISI Dra. Diana Cecilia Muñoz Casanova –dianauns@yahoo.es Pág. 3


Universidad Nacional del Santa Laboratorio7-Conexiòn a la Base de Datos en PHP

// ¡Uf, lo conseguimos!. Sabemos que nuestra conexión a MySQL y nuestra consulta


// tuvieron éxito, pero ¿tenemos un resultado?
if ($resultado->num_rows === 0) {
// ¡Oh, no ha filas! Unas veces es lo previsto, pero otras
// no. Nosotros decidimos. En este caso, ¿podría haber sido
// actor_id demasiado grande?
echo "Lo sentimos. No se pudo encontrar una coincidencia para el ID $aid. Inténtelo de nuevo.";
exit;
}

// Ahora, sabemos que existe solamente un único resultado en este ejemplo, por lo
// que vamos a colocarlo en un array asociativo donde las claves del mismo son los
// nombres de las columnas de la tabla
$actor = $resultado->fetch_assoc();
echo "A veces veo a " . $actor['first_name'] . " " . $actor['last_name'] . " en la TV.";

// Ahora, vamor a obtener cinco actores aleatorios y a imprimir sus nombres en una lista.
// El manejo de errores va a ser menor aquí, aunque ya sabemos como hacerlo
$sql = "SELECT actor_id, first_name, last_name FROM actor ORDER BY rand() LIMIT 5";
if (!$resultado = $mysqli->query($sql)) {
echo "Lo sentimos, este sitio web está experimentando problemas.";
exit;
}

// Imprimir nuestros cinco actores aleatorios en una lista, y enlazar cada uno
echo "<ul>\n";
while ($actor = $resultado->fetch_assoc()) {
echo "<li><a href='" . $_SERVER['SCRIPT_FILENAME'] . "?aid=" . $actor['actor_id'] . "'>\n";
echo $actor['first_name'] . ' ' . $actor['last_name'];
echo "</a></li>\n";
}
echo "</ul>\n";

// El script automáticamente liberará el resultado y cerrará la conexión


// a MySQL cuando finalice, aunque aquí lo vamos a hacer nostros mismos
$resultado->free();
$mysqli->close();
?>

Ejemplo Nº 02 Sintaxis MySQL SELECT

SELECT
[ALL | DISTINCT | DISTINCTROW ]
[HIGH_PRIORITY]
[STRAIGHT_JOIN]
[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
[SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
select_expr [, select_expr ...]
[FROM table_references
[PARTITION partition_list]
[WHERE where_condition]
[GROUP BY {col_name | expr | position}
[ASC | DESC], ... [WITH ROLLUP]]

EPISI Dra. Diana Cecilia Muñoz Casanova –dianauns@yahoo.es Pág. 4


Universidad Nacional del Santa Laboratorio7-Conexiòn a la Base de Datos en PHP

[HAVING where_condition]
[ORDER BY {col_name | expr | position}
[ASC | DESC], ...]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
[PROCEDURE procedure_name(argument_list)]
[INTO OUTFILE 'file_name'
[CHARACTER SET charset_name]
export_options
| INTO DUMPFILE 'file_name'
| INTO var_name [, var_name]]
[FOR UPDATE | LOCK IN SHARE MODE]]

Repasemos brevemente la sintaxis superior:

 Con SELECT podemos seleccionar una o varias columnas de datos.


 FROM table_references nos vale para seleccionar una o varias tablas que
almacenan las columnas previamente indicadas.
 En WHERE where_condition se especifican la o las condiciones que se deben
cumplir para los valores solicitados.

Dentro de la cláusula WHERE tenemos los siguientes condicionantes que son


importantes y útiles:

 GROUP BY: Nos permite agrupar los datos obtenidos de la base de datos.
 HAVING: Permite hacer cálculos y condiciones más complejas que no se pueden
hacer con la cláusula WHERE.
 ORDER BY: Ordenación por columna.
 LIMIT: Especificación del número de filas devueltas.

Otras sentencias de MySQL que os pueden ser útiles:

 ALTER TABLE
 UPDATE
 INSERT
 TRUNCATE TABLE
 Clásula WHERE

Ejemplos de MySQL SELECT

Vamos a comenzar con estos sencillos ejemplos, más adelante iré poniendo algunos más
complejos con los condicionantes anteriormente mencionados:

SELECT * FROM usuarios

EPISI Dra. Diana Cecilia Muñoz Casanova –dianauns@yahoo.es Pág. 5


Universidad Nacional del Santa Laboratorio7-Conexiòn a la Base de Datos en PHP

Con el ejemplo superior estamos seleccionando todas las columnas (SELECT *) de la


tabla usuarios, se devolverán todas las filas ya que no tenemos ningún condicionante con
WHERE.

SELECT nombre FROM usuarios

Con el ejemplo superior estamos seleccionando la columna ‘nombre’ de la tabla usuarios,


se devolverán todas las filas ya que no tenemos ningún condicionante con WHERE.

SELECT nombre, apellidos FROM usuarios

Con el ejemplo superior estamos seleccionando las columnas ‘nombre y apellidos’ de la


tabla usuarios, se devolverán todas las filas ya que no tenemos ningún condicionante con
WHERE.

SELECT nombre, apellidos FROM usuarios, clientes

Con el ejemplo superior estamos seleccionando las columnas ‘nombre y apellidos’ de 2


tablas distintas, se devolverán todas las filas ya que no tenemos ningún condicionante
con WHERE.

Ejemplos de cláusula WHERE MySQL

Vamos a ver con una serie de ejemplos sencillos los condicionantes de WHERE:

1 SELECT nombre, apellidos


2 FROM empleados
3 WHERE edad = 40

En el ejemplo superior estamos seleccionando el nombre y apellidos de los empleados


que tengan 40 años. Cuando el campo a comparar es numérico va sin comillas.

1 SELECT nombre, apellidos


2 FROM empleados
3 WHERE pais = 'México'

En el ejemplo superior estamos seleccionando el nombre y apellidos de los empleados


que sean de México. El campo a comparar es alfanumérico, por lo tanto va entre
comillas.

1 SELECT nombre, apellidos


2 FROM empleados
3 WHERE estado_civil != 'soltero'

EPISI Dra. Diana Cecilia Muñoz Casanova –dianauns@yahoo.es Pág. 6


Universidad Nacional del Santa Laboratorio7-Conexiòn a la Base de Datos en PHP

En el ejemplo superior estamos seleccionando el nombre y apellidos de los empleados


que estén casados, la condición implica que el resultado devuelto sea distinto a ‘soltero’.

1 SELECT nombre, apellidos


2 FROM empleados
3 WHERE edad > 40

En el ejemplo superior estamos seleccionando el nombre y apellidos de los empleados


que tengan más de 40 años, los que tengan 40 años no saldrán en los resultados.

1 SELECT nombre, apellidos


2 FROM empleados
3 WHERE edad < 40

En el ejemplo superior estamos seleccionando el nombre y apellidos de los empleados


que tengan menos de 40 años, los que tengan 40 años no saldrán en los resultados.

1 SELECT nombre, apellidos


2 FROM empleados
3 WHERE edad >= 40

En el ejemplo superior estamos seleccionando el nombre y apellidos de los empleados


que tengan 40 años o más, los que tengan 40 años sí saldrán en los resultados.

1 SELECT nombre, apellidos


2 FROM empleados
3 WHERE edad <= 40

En el ejemplo superior estamos seleccionando el nombre y apellidos de los empleados


que tengan 40 años o menos, los que tengan 40 años sí saldrán en los resultados.

Cómo realizar varios condicionantes con OR y/o AND

Hasta ahora os he puesto ejemplos básicos con una única condición, os muestro varios
ejemplos para realizar más condiciones con OR y/o AND:

1 SELECT nombre, apellidos


2 FROM empleados
3 WHERE edad <= 40 AND edad >= 50

En el ejemplo superior estamos seleccionando el nombre y apellidos de los empleados


que tengan 40 años o menos y los que tengan 50 o más años, los que tengan 40 y 50
años sí saldrán en los resultados.

EPISI Dra. Diana Cecilia Muñoz Casanova –dianauns@yahoo.es Pág. 7


Universidad Nacional del Santa Laboratorio7-Conexiòn a la Base de Datos en PHP

1 SELECT nombre, apellidos


2 FROM empleados
3 WHERE pais = 'México' AND edad > 30

En el ejemplo superior estamos seleccionando el nombre y apellidos de los empleados


que sean de México y que tengan más de 30 años, los que tengan 30 años no saldrán
en los resultados.

1 SELECT nombre, apellidos


2 FROM empleados
3 WHERE pais != 'México' OR edad > 50

En el ejemplo superior estamos seleccionando el nombre y apellidos de los empleados


que no sean de México o que tengan más de 50 años, los que tengan 50 años
no saldrán en los resultados. Los empleados que tengan más de 50 y no sean de
México sí saldrán.

1 SELECT nombre, apellidos


2 FROM empleados
3 WHERE pais != 'México' OR edad > 30 AND antiguedad > 10

En el ejemplo superior estamos seleccionando el nombre y apellidos de los empleados


que no sean de México o tengan más de 50 años y que además tengan una
antigüedad en la empresa de más de 10 años. Los empleados que sean de México y
tengan 30 o menos años con antigüedad de más de 10 sí saldrán.

1 SELECT nombre, apellidos


2 FROM empleados
3 WHERE (pais = 'México' OR edad > 30) AND antiguedad > 10

Con los paréntesis podemos agrupar las condiciones para que sean menos liosas que el
ejemplo anterior. En este nuevo caso se debe cumplir una de las 2 condiciones, que sí
sea de México o tenga más de 30 años, del resultado obtenido se mostrarán los que
además tengan más de 10 años de antigüedad en la empresa.

EPISI Dra. Diana Cecilia Muñoz Casanova –dianauns@yahoo.es Pág. 8


Universidad Nacional del Santa Laboratorio7-Conexiòn a la Base de Datos en PHP

Actividad Nº 01 Diseñar una base de datos para:

EPISI Dra. Diana Cecilia Muñoz Casanova –dianauns@yahoo.es Pág. 9


Universidad Nacional del Santa Laboratorio7-Conexiòn a la Base de Datos en PHP

Actividad Nº 02 Diseñar una base de datos para:

EPISI Dra. Diana Cecilia Muñoz Casanova –dianauns@yahoo.es Pág. 10


Universidad Nacional del Santa Laboratorio7-Conexiòn a la Base de Datos en PHP

Actividad Nº 03

PARA CADA UNA DE LAS BASES ANTERIORES REALIZAR LO SIGUIENTE:

1. HACER UN PROGRAMA CONSULTA QUE DEVUELVA LOS DATOS DE LA FACTURA


2. HACER UN PROGRAMA CONSULTA QUE MUESTRE DATOS DE LA FACTURA Y LOS
ORDENE SEGÚN FECHA DE EMISIÓN DE FACTURA Y POR SERIE.
3. HACER UN PROGRAMA CONSULTA QUE TE ORDEN LAS FACTURAS SEGÚN EL
MONTO EN FORMA DESCENDENTE.
4. HACER UN PROGRAMA CONSULTA QUE MUESTRE LOS PRODUCTOS EN ALMACEN.
5. HACER UN PROGRAMA CONSULTA QUE MUESTRE LOS PRODUCTOS EN ALMACEN
ORDENADOS SEGÚN FECHA DE INGRESO.
6. HACER UN PROGRAMA CONSULTA QUE TE PERMITA CONSULTAR LOS DATOS DE
DOS TABLAS (ALMACEN)

EPISI Dra. Diana Cecilia Muñoz Casanova –dianauns@yahoo.es Pág. 11