Desarrollo de
aplicaciones web con
PHP y MySQL
EDITORIAL
MACRO’
Espana - México - Colombia - Chile - Ecuador - Peri - Bolivia - Uruguay - Guatemala - Costa RicaMACRO
Desarrollo de aplicaciones web con PHP y MySQL
Autor: Manuel Angel Torres Remion
© Derechos de autor registrados:
Empresa Editora Macro EIRL
© Derechos de edicién, arte gréfico y diagramacién reservados:
Empresa Editora Macro EIRL
Coordinacién de edicién:
Cynthia Arestegui Baca
Disefio de portada
Alejandro Marcas Leén
Correccién de estilo:
Hansi Sanchez
Magaly Ramon Quiroz
Diagramacién:
Lizbeth R. Eufracio Quispe
Edicion a cargo de:
© Empresa Editora Macro EIRL
Av Paseo de la Republica N." 5613 , Miraflores, Lima, Pera
& Teléfono: (511) 748 0560
2. E-mail:
[email protected]
© Pagina web: www.editorialmacro.com
Primera edicién: enero de 2015
Tiraje: 1000 ejemplares
Impresién
Talleres gréficos de la Empresa Editora Macro EIRL
Jr. San Agustin N." 612-624, Surquillo, Lima, Peri
ISBN N.* 978-612-304-255-4
Hecho el depésito legal en la Biblioteca Nacional del Pera N.* 2015-00728
Prohibida la reproduccién parcial o total, por cualquier medio 0 método, de este libro sin previa
autorizacion de la Empresa Editora Macro EIRL.Eon omer cui
Manuel Angel Torres Remon es Licenciado en Informatica. Se dedica a la consultoria y docencia de cursos de
tecnologia desde hace 15 afios. Su formacién académica la llevé a cabo en el Instituto Manuel Arévalo Caceres, en
la Universidad Alas Peruanas y en la Universidad Peruana del Norte.
En Ia actualidad, se desempefia como docente en el Instituto Superior Manuel Arévalo Caceres, Cibertec y
Unimaster, de la Universidad Nacional de Ingenieria, en los cuales imparte cursos de programacisn, base de datos
Yyandlisis de sistemas.
Entre sus publicaciones se encuentran Fundamentos de programacién con Visual Basic 2012, Programacién
orientada a objetos con Visual Bosic 2012, Programacién Transact con SQL Server 2012 y su dltima
publicacién fue dedicada al HTMLS y CSS3.
Para cualquier duda o consulta sobre el material puede escribir al email: manuel.torresr @hotmail.com.ESTER Cauley
Escuché alguna vez la frase “Ia lectura de un libro enriquece de conacimientos y empobrece la
ignorancia’, pero hoy en dia un libro impreso es dificil de leer, pues son pocas las personas que
cargan uno en mano, estos han sido reemplazados por los dispositivos méviles. Por tal motivo, mi
primer agradecimiento es para usted amigo lector, por adquirir este material que simboliza sacrificio,
tiempo y esfuerzo en comprobar que los cédigos expuestos son los correctos.
Asimismo, deseo agradecer a la gran familia de la Editorial Macro por confiar nuevamente en mi
persona para el desarrollo del presente libro: Desarrollo de aplicaciones web con PHP y MySQL,
que cuenta con un fundamento expresado en el libro Fundamentos de programacién con PHP, que
recomiendo revisar si los cédigos expuestos en este material resultan un tanto complejos.
Finalmente, quiero agradecer enormemente a mis pequefias hijas Angela Victoria y Fernanda Ximena
Torres Lazaro, a mi esposa Luz y a mi querida suegra Victoria Menor Bautista que siempre tiene un
comentario bueno respecto a mi persona y ello me motiva de gran manera a seguir adelante.‘Amis pequefias Angela Victoria y Fernanda Ximena,
que son mi fuente de inspiracién, y a mi esposa Luz,
Por su comprensién en todo lo que me propongo.Introduccién... . . es a
Capitulo 1
Introduccién al MySQL
1.1 Introduccién
1.2 Caracteristicas
1.3 Versiones de MySQL... 16
1.4 Descargar MySQL... 17
1.4.1 Comprobar con WAMP Server..... v7
1.4.2 Comprobar con XAMPP .. 18
1.5 Manejo de comandos bisicos desde MySQU Console. 19
1.6 MySQL Workbench...
1.6.1 Descargar MySQL Workbench...
1.6.2 Instalacién de MySQL Workbench 3
1.6.3 Pantalla inicial de MySQL Workbench y conexién a MySQL 24
1.7 MySQL-Front..
1.7.1 Descargar MySQL-Front..
1.7.2 Instalacién de MySQL-Front.
1.7.3 Creando una nueva conexi6n a MySQL...
1.8 Sentencias MySQL para el objeto de base de datos..
1.8.1 Creacién de una base de datos
1.8.2 Listar las bases de datos registradas en el servidor
1.8.3 Activar la base de dat0s nnn
1.8.4 Mostrar la base de datos activa
1.8.5 Eliminar la base de datos
1.9 Sentencias MySQL para el objeto tabla
1.9.1 Motor de almacenamiento.
1.9.2 Tipos de datos ...
1.9.3 Creacién de una tabla...
1.9.4 Agregando columna ala tabla...
1.9.5 Eliminar columnas de una tabla.
1.9.6 Implementacién de columnas con valores nulos..
1.9.7 Implementacién de columnas con valores por defecto
1.9.8 Verificar la estructura de una tabl
1.9.9 Restringir la duplicidad de valores.
1.9.10 Creacién de tablas relacionales ..
1.9.11 Asignacién de la llave primaria .
1.9.12 Visualizar a estructura de la tabla desde MySQL-Front y MySQL Workbench... 47
1.9.13 Asignacién de la llave forénea
1.9.14 Implementacién de un esquema de base de datos...
1.10 Sentencia de Manipulacién de Datos (SMD)
1.10.1 Sentencia INSERT...
1.10.2 Sentencia UPDATE.
1.10.3 Sentencia DELETE...1.10.4 Sentencia TRUNCATE
1.11 Consulta basica con la sentencia SELECT...
1.11.1 Seleccién de datos sin restricciones .. ee
1.11.2 Selecci6n de datos limitando las columnas de la tabla. 62
1.11.3 Restringir la muestra de datos repetidos..
1.11.4 Ordenar de forma ascendente o descendente los registros de una tabla..
1.11.5 Limitar los registros de la consulta
1.12 Combinacién de tablas con INNER JOIN ... tiene
1.12.1 Combinacién de tablas con LEFT JOIN 66
1.12.2 Combinacién de tablas con RIGHT JOIN... 67
1.13 Recuperacién de datos agrupados
1.13.1 Cldusula GROUP BY..
1.13.2 Funcién agregada COUNT.
1.13.3 Funcién agregada SUM...
1.13.4 Funcién agregada MAX..
1.13.5 Funcién agregada MIN ..
1.13.6 Funcién agregada AVG...
1.13.7 Cldusula HAVING...
Capitulo 2
Integracién MySQL con PHP
2.1 Introduccién ..
2.2 Conectar MySQL a PHP.
2.2.1 Funcién de conexién al servidor MySQL..
2.2.2 Funcién de cierre del servidor
2.2.3 Funcién de seleccién de base de datos desde el servidor
2.2.4 Funcién que ejecuta una sentencia de consulta MySQL en PHP ...
2.2.5 Funcién que determine el total de registros devueltos por la funcién mysql_query
usando la sentencia SELECT de MySQL...
2.2.6 Funcin que muestre los registros de una consulta mysql_query en PHP 85
2.2.7 Casos desarrollado:
Caso desarrollado 1: Listado de clientes por distro.
Caso desarrollado 2: Listado de boletas por cliente
Caso desarrollado 3: Listado de clientes con imagenes... 101
Caso desarrollado 4: Listado de clientes paginado con imagenes .n.nnnrneren 105
2.2.8 Manejo de registros usando arreglos de indice 110
2.2.9 Manejo de registros usando arreglo asociativo 112
2.2.10 Manejo de registros usando arreglos asociativos y foreach... oor 18
2.2.11 Manejo de registros usando procedimientos almacenados .. 117
Caso desarrollado 5: Consulta de productos por cédigo i 12D,Capitulo 3
Mantenimiento de registros
3.1 Insercién de registros.....
3.1.1 Casos desarrollados...
Caso desarrollado 1: Registro del nuevo cliente.
Caso desarrollado 2: Registro de! nuevo cliente adjuntando su imagen.
3.2 Actualizacion de registros. 152
Caso desarrollado: Actualizacién de datos del cliente. pes
3.3 Eliminacién de registros .. : - pesca 8
we 127
132
132
142
aso desarrollado: Eliminando registro de cliente anu se 173
3.4 Casos desarrollados..
Caso desarrolado 1: Mantenimiento de registro de ellentes nso 184
Caso desarrollado 2: Mantenimiento de registro de clientes paginadwvvrsonow- 195
Capitulo 4
Reportes
4.1 Clase FPOF()..
442 Principals funciones dela lbreria FPDF..
4.2.1 Objeto FPOF.
4.2.2 Atfadir una nueva pagina POF ..
4.2.3 Definicién del tipo de letra ytamafio del texto
4.2.4 Definicién de una celda para un elemento textual
4.2.5 Definicién de la posicién de un elemento textual.
4.2.6 Definicién del color de un elemento.
4.2.7 Definicién de una linea recta
4.2.8 Definicién de un recténgulo... :
4.2.9 Implementacién de una imagen en el documento POF...
4.2.10 Definicién de la salida de informaci
4.2.11 Casos desarrollados
Caso desarrollado 1: Reporte simple de clientes PDF..
Caso desarrollado 2: Reporte de clientes con banner
Caso desarrollado 3: Reporte de clientes con imagenes
Caso desarrollado 4: Generacién de fotacheck...
4.3 Clase PHPLOT...
4.3.1 Tipos de gréficos... :
4.3.2 Caso desarrollado: Generacién de gréficos estadisticos.Capitulo 5,
Manejo de imagenes
5.1 Introduccién
5.1.1 Casos desarrollados... 239
Caso desarrollado 1; Grafica bésio-Listado de clientes por disrito 239
aso desarrollado 2: Gréfico con PhpLot-Reporte de boletas por mes-Afio 2015... 243
Caso desarrollado 3: Grafico con PHPLot-Listado de boletas por cliente... 248
Caso desarrollado 4: Grafico con Google Charts-Listado de boletas por cliente... 258
239
Capitulo 6
Programacién orientada a objetos
6.1 Introduccién 267
6.2 Clases en PHP.. : sn 267
6.3 Encapsulamiento de datos 270
6.4 Objetos en PHP. am
6.5 Método constructor en PHP... am
6.6 Casos desarrollados.... s 272
Caso desarrollado 1; Clase/objeto-Venta de productos . 22
Caso desarrollado 2: Método constructor-Pago de trabajadores 280
Caso desarrollado 3: Método constructor-Listado de productos con MYSQL... 286
Caso desarrollado 4: Mantenimiento de productos orientado a objetos.. 291
Caso desarrollado 5: Mantenimiento de productos con MVC. eineee 305
Capitulo 7
Objetos de datos PHP (PDO)
7.1 Introduccién .. . 331
7.2 Conexién PDO. 331
7.3 Casos desarrollados.. 1382
Caso desarrollado 1: Listado de clientes. 332
Caso desarrollado 2: Consulta de datos de cliente por cédigo 336
Caso desarrollado 3: Listado de clientes por distrito... 1339
Bibliografia 343ers Lay
El libro Desarrollo de aplicaciones web con PHP y MySQL le permitiré crear aplicaciones web usando
base de datos y, ademés, le orientard en la programacién de objetos.
Para cumplir con dicho objetivo se ha dividido el libro en siete capitulos que son distribuidos de
la siguiente manera: el capitulo uno presenta una breve introduccién sobre las sentencias MySQL,
este capitulo es la base del desarrollo del libro, pues al comprender dichas sentencias podré
generar aplicaciones sin ningun problema de datos. Se sugiere que repase este tema cuando lo crea
conveniente y en cualquier capitulo.
El capitulo dos hace referencia a la integracién de PHP con MySQL. Se emplean técnicas de conexién
al servidor de la base de datos, asi como el permiso de uso de la misma. Con ello se aprender a
mostrar el listado de registros conectados a la base de datos con casos desarrollados y explicados.
En el capitulo tres se aplican los métodos necesarios para un mantenimiento de registros adecuado,
como agregar, eliminar o actualizar los datos de una tabla de base de datos, se presentan casos
desarrollados y explicados.
Por otra parte, un punto importante dentro de los proyectos web son los informes o reportes que
se pueden producir a partir de los datos de una base de datos, tal es asi que en el capitulo cuatro se
implementan aplicaciones con reportes, usando la clase FPDF.
Otra tarea prioritaria de las aplicaciones web es el manejo de imagenes de forma dindmica, tal es
asi que el capitulo cinco est dedicado al desarrollo de aplicaciones, se emplean imagenes graficas
referentes a los valores de la base de datos, esto se analizaré mediante el uso de las clases PHPLot
y Google Charts.
De acuerdo a los supuestos anteriores, se esta en la capacidad de crear aplicaciones orientadas
a objetos, es decir, se implementaré aplicaciones usando la clase y sus objetos a partir de casos
desarrollados basicos, como el método constructor, métodos GET/SET y los objetos. Asimismo, se
emplea la programacién orientada a objetos para conectarnos a una base de datos e implementar
aplicaciones web de mantenimiento de registros, usando puras clases.
Finalmente, en el capitulo siete se hace uso de la programacién orientada a objetos, mediante la
clase PDO de PHP. Ademas, se muestran casos desarrollados de mantenimiento de registros.
El autor confia en que este libro resulte util, en particular, a los estudiantes y profesionales para
quienes el desarrollo de aplicaciones web con PHP y MySQL sea de su interés.Introducci6n al MySQL1.1 Introduccién
MySQL es considerado como un sistema de gestién de bases de datos relacional, el cual permite
administrar los registros, actualizacién y eliminacién de la informacién tal como lo haria un SQL
Server u Oracle.
La caracteristica principal de PHP es el tema de los derechos debido a que cuenta con una licencia
dual, por una parte es considerado como software libre bajo la licencia GPL (licencia publica general)
y por otra es necesaria la compra de la licencia.
Se atribuye el costo de licencia a la empresa sueca MySQL AB desde los primeros meses de! 2008,
esta a su vez es una subsidiaria de la empresa Sun Microsystems y esta de Oracle Corporation a partir
de abril de 2009.
Se considera adquirir la licencia cuando modificamos el cédigo MySQL y queremos redistribuir
aplicando un costo por dicha distribucién. Dicho de otro mods, lo que es prohibido es distribuir algo
que hemos obtenido bajo la licencia GPL; eso quiere decir que podemos usar el servidor MySQL pero
‘no incluirlo dentro del software desarrollado, ya que eso distribuiria a MySQL y, por tanto, rompe las
reglas GPL; lo que se recomienda es que el software que se desarrollard también se distribuya bajo
la misma licencia.
A ccontinuacién, algunas politicas que se pueden aplicar bajo la licencia GPL:
+ Implementar un sistema de informacién en una organizacién que solo use al servidor MySQL.
* Se puede modificar el cédigo fuente de MySQL las veces que crea necesaria mientras no distribuya
a MySQL con dichos cambios.
* Se permite la distribucién de MySQL a pesar de sus modificaciones, pero siempre bajo la licencia GPL.
+ Siel sistema de informacién solo usa a MySQL y no lo distribuye, el sistema puede ser privativo y
beneficiarse de él
Como se mencioné, MySQL fue creada por la empresa “MySQL AB” establecida en Suecia en el afio
1995 con el objetivo principal de cumplir con el esténdar SQL (Lenguaje de consultas estructurado),
sin sacrificar la velocidad, fiabilidad o usabilidad demostrada por otros SGBD.
Se sostiene que el nombre «MySQL» es heredado de su modelo
anterior llamado mSQL, que presentaba algunas deficiencias y al cual le >
incorporaron API para su mejoramiento, denomindndolo asi MySQL. Otros
sefialan que las letras iniciales «My» son colocadas en honor a la hija de
todos cedars EreleneCellogoipasesestere weeiromire: ALS GIL
del delfin de MySQL es «Sakila» y fue asignado asi por los fundadores
de la empresa MySQL AB, proponiendo un concurso para dicho nombre
llamado Name the Dolphin.
Logotipooficio! de MysaL
1.2. Caracteristicas
Como ya se habia mencionado, uno de los puntos principales de MySQL es la licencia DUAL que
mantiene para su uso; pero, ademas, presenta las siguientes caracteristicas:
* MySQL fue escrito en su totalidad en el lenguaje C y C++.
* Esconsiderado como multiplataforma, ya que se puede ejecutar en diferentes sistemas operativos;
nosotros lo implementaremos en Windows.* Es considerado como un sistema portable de licencia GPL ya que usa GNU Automake (herramienta
de programacién que produce programas makefiles portables usado en la compilacién de software
e implementando especialmente en Linux y Unix), Autoconfig y Libtool
* Contiene una interfaz de programacién de aplicaciones (API) que permite usar MySQL en lenguajes
de programacién como C, C++, Java, PHP, Perl y otros lenguajes.
* Proporciona un sistema de almacenamiento transaccional y no transaccional con un sistema de
reserva de memoria muy rapido basado en hilos y multihilos.
+ Las funciones SQL estan implementadas usando una libreria altamente optimizada y deben ser
tan répidas como sea posible. Normalmente no hay reserva de memoria tras toda la inicializacién
para consultas.
+ El servidor esta disponible como un programa separado para usar en un entorno de red cliente/
servidor. También estd disponible como biblioteca y puede ser incrustado (linkado) en aplicaciones
auténomas. Dichas aplicaciones pueden usarse por si mismas 0 en entornos donde no hay red
disponible.
= Cuenta con un soporte completo para las sentencias SELECT y WHERE, tal como lo maneja SQL
Server.
* Cuenta con un sistema de privilegios y contrasefias que es muy flexible y seguro, suficiente para
tuna gestién de la informacién. Las contrasefias resultan ser totalmente seguras ya que estas son
cifradas cuando se conecta con un servidor.
* Cuenta con un soporte importante de almacenamiento de base de datos, se han probado con mas
60 000 tablas y cerca de 5 000 000 000 000 de registros.
* Los clientes de MySQL pueden conectarse al servidor usando sockets del TCP/IP.
1.3 Versiones de MySQL
Todas las versiones de MySQL cumplen de manera correcta el objetivo del SGBD, en este material
trabajaremos con la versién 5.5 que resulta la versién mas estable.
i
EEE
+t
Fuente:
1.4 Descargar MySQL
Ingrese a la siguiente URL: http://dev.mysql.com/downloads/
MySQL Community Downloads
MySQL Community Server
"MySQL Community Server is the world's most popular open source database,
De la imagen, seleccione MySQL Community Server (GPL); desde aqui podré elegir la versién
adecuada y especialmente escoger el tipo de sistema del cliente que puede ser 32 0 64 bits.
‘Recommended Download
MySQL Installer 5.6
a for Windows
BA
nein NS
==
1h One Package.
Windows (x86, 64-bit), MySQL Installer MSI
Windows (x6, 22-bit), MSE installer 5620 440M
Windows (x06, 64-bit), MSI inst 5620 47M
‘Windows (x86, 32-bit), Z1P Archive 5620 27.08
‘windows (x86, 64-bit), ZIP Archive seo one =
Desde esta ventana se recomienda revisar el tipo de sistema de su computadora personal para poder
seleccionar la descarga de MySQL adecuada para su sistema.
1.4.1 Comprobar con WAMP Server
‘Se debe tener en cuenta que siha instalado WAMP Server o XAMPP, como servidor de aplicaciones
para PHP, entonces ya tiene instalado MySQL. Veamos cémo comprobar con WAMP Server:
* Cargue el servidor WAMP Server.
* Seleccione (@j} residente en las aplicaciones de memoria ubicada en la barra de tareas de Windows.DESARROLLO DE APLICACIONES WEB CON PHP Y MYSQL
Seleccione MySQL > MySQL Console.
7) clwamplbiokmahimpgB5S brim ve =
Desde la ventana anterior, el servidor solicita la clave de acceso, para lo cual solo debe pulsar la
tecla Enter y visualizard la siguiente ventana:
© e\wamp bin myeghmys9935.20\in mya
Para comprobar si todo es correcto, puede ingresar la siguiente instruccién: select version();
1.4.2 Comprobar con XAMPP.
Asegtirese que otro servidor web no se encuentre ejecutado en nuestra computadora personal,
Cargue el servidor XAMPP.
Verifique que en la barra de tareas se encuentre el icono [3
Pulse la combinacién de teclas Windows + R y coloque la instruccién CMD.CAP. 4: 1
cco at MYSQL
Coloque las siguientes instrucciones en estricto orden para llegar al servidor MySQL.
Seguidamente, se le solicitard el password y, como no se ha configurado, solo pulse la tecla Enter
y pruebe el servidor con la sentencia: select version();
[md Adminirador C\Windowsaytemd2\emdsne- mysql -hlocahor -u09t-p
1.5 Manejo de comandos basicos desde MySQL Console
Pruebe algunos comandos MySQL para comprobar que el servidor trabaja de manera correcta:
show databases;
Permite mostrar las bases de datos almacenadas en el servidor.PRGB vesarrotto ve apticaciones wee c
IN PHP Y MYSQL
use mysql
Permite actvar una base de datos regstrada en e! servdor,
Permitelistar las tablas de una base de datos activa,
[ta CinndonrtensZierdese-myaglochws oot p a
show fields from user
Permitelistar los campos de una tabla, para este caso se ha listado los campos de la tabla user.1.6 MySQL Workbench
En vista de que seria un poco engorroso trabajar en un entorno tipo D.0.S, se usa una herramienta
visual como MySQL Workbench el cual integra la administracién de bases de datos, el disefio de
bases de datos, creacién y mantenimiento para el sistema de base de datos MySQL, todo lo que un
sistema de gestion de base de datos necesita.
1.6.1 Descargar MySQL Workbench
1. Ingrese a la siguiente URL: http://dev.mysql.com/downloads/
2. Seleccione MySQL Workbench.
3, Seleccione Download.
MySQl Workbench 6.1.7
4, Seleccione «No thanks, just start my download».
sc comia ig Orc 80 fr atenicton yu ake have an ace Web accent ck he og ik
othr, start my domo
5. Finalmente, revise la seccién de descarga de su computadora personal.DESARROLLO DE APLICACIONES WEB CON PHP Y MYSOL
1.6.2. Instalacién de MySQL Workbench
Se recuerda que antes de iniciar la instalacién de MySQL Workbench debe contar con MySQL
instalado en su computadora personal, ya sea usando el propio software MySQL o por medio de
WAMP Server 0 XAMPP.
Realice los siguientes pasos:
1. Inicie el proceso de instalacién de MySQL Workbench.
Welcome to the Setup Wizard for MySQL
Workbench 61 CE
Tes mand ett even 67a yor coma
samen rage eshte orton nt
cambiar la ubicacién del lugar de la instalacién, asi que en el proceso de
instalacién se procederé a seleccionar Next en todas las ventanas.
(kext tint tot ler, rd Change oneal a erent oder
a tetas. wero 6.1.05 to:
Progam les (8) 4591 SCL Workbench 6.1 CE\cart: wcocconn mar ERB
3. En el proceso de instalacién, seleccione el tipo Completo ya que el software viene con todas
las especificaciones necesarias para la instalacién
‘Setue Tye }
Fee dec aset toe
© Gente
a Senne
aston,
a
4, Finalmente, inicie la instalacién, seleccionando la opcién Install,
raran ies G26 9. Wate 6.8
Cx et) et)
5. La siguiente ventana muestra la finalizacin de la instalacién.
Wizard Completed
Se ha ed etna i Wotberch6.1c.cart: wcocconn mar ERB
3. En el proceso de instalacién, seleccione el tipo Completo ya que el software viene con todas
las especificaciones necesarias para la instalacién
‘Setue Tye }
Fee dec aset toe
© Gente
a Senne
aston,
a
4, Finalmente, inicie la instalacién, seleccionando la opcién Install,
raran ies G26 9. Wate 6.8
Cx et) et)
5. La siguiente ventana muestra la finalizacin de la instalacién.
Wizard Completed
Se ha ed etna i Wotberch6.1c.DESARROLLO DE APLICACIONES WEB CON PHP Y MYSQL
1.6.3 Pantalla inicial de MySQL Workbench y conexién a MySQL
© Creando una nueva conexién a MySQL
Para crear y administrar informacién de MySQL, se debe crear una nueva conexién que permitirs
tener acceso a todos los comandos MySQL.
Realice los siguientes pasos:
1. Desde la ventana principal seleccione la opcién +.
2. Desde la ventana Setup New Connection se deberd re- (WES
gistrar un nombre ala conexidn, verifique que el User- | @ comeced0
name sea «root» y, finalmente, seleccione la opcién with ser 09
Test Connection. Si todo es correcto debe mostrarse la someon pees,
siguiente ventana:CAP. 1: moose a MYSQL
3, Seguidamente, se mostraré en la pan-
talla principal la conexién realizada tal
‘como se muestra en la siguiente imagen
4, Para comenzar a trabajar con MySQL, debe seleccionar la conexién realizada y se mostrar la
pantalla principal del entorno; desde aqui podra administrar toda la informacién concerniente
a un proyecto cliente-servidor con MySQL.
1.7 MySQL-Front
Es una aplicacién que permite administrar la informacién de manera sencilla y es de facil uso para el
usuario de MySQL. Presenta un disefio bastante intuitivo que permite concentrarse en las sentencias
de MySQL como una secuencia de comandos asi como de manera visual.
1.7.1 Descargar MySQL-Front
1. Ingrese a la siguiente URL: http://www.mysqlfront.de/
2. Seleccione la opcién DOWNLOAD FILE.
Bip wsat-Front
Description
‘Support3. Finalmente, revise la seccién de descarga de su computadora personal
Ls
Aho Seup
1.7.2 Instalacién de MySQL-Front
‘Se recuerda que antes de iniciar la instalacién de MySQL-Front debe contar con MySQL instalado en
su computadora personal, ya sea usando el propio software MySQL o por medio de WAMP Server
‘0 XAMPP.
Realice los siguientes pasos:
1. Inicie el proceso de instalacién de MySQlL-Front,
instalacion de MySQl-Front
‘te rotamer HySQLrot Sen austen,
‘Serecomerda corr tesla demis panes antes
osu
ps cen Snsent practi oan Cnc pra et
‘ebomsaatn
2. No seré necesario cambiar la ubicacién del lugar de la instalacién, asi que en el proceso de
instalacién se procederd a seleccionar Siguiente en todas las ventanas.
Selecone fn Carpeta de Destino
(Dende debe ratalae SOL ent
Ji Biron stars mat Fontes sade cea
fora contra, haga dicen Sqete 5 esa secorar una carpeta Serer,
Repo acen buona
==
‘se reaserensmeres 12,708 de epace re en es,
Cente )[ootene >) Cea)CAP 1 honcoon a mSQL
3. La instalacién de MySQl-Front crea un acceso directo en el menti Inicio, no seré necesario
modificar, solo seleccione Siguiente.
(Bite cear un carpets ene Mend Inigo
4, La instalacién solicta la creacién de un icono en el escritorio y la asociacién con archivos de
extensién SQL; los cuales son activados en la siguiente ventana; luego seleccione Siguiente.vo: [BBB esarrotio o& apuicaciones wes Con PHP Y MYSQL
5. Antes de comenzar la instalacién se nos muestra una estadistica de opciones seleccionadas en
pasos anteriores, solo seleccione Inst:
‘Completando la instalacion de
MySQL-Front
programa comple la nstalacin de MySQL Font en =
seme, Puede ejecitar a apcacin hacendo sobre a
ono nated.
aga de en Pralzar para sa del programa dental,car i weorccon son
1.7.3 Creando una nueva conexién a MySQL
Para crear y administrar informacién de MySQL se debe crear una nueva conexién que permitird
tener acceso a todos los comandos MySQL.
Realice los siguientes pasos:
* Aliniciar la aplicacién MySQl-Front se muestra una ventana de Agregar sesién. En esta ventana,
en Nombre asigne «Libro-PHP», en la opcién Host asigne «localhost» y asegiirese que en Usuario
sea «root». No sera necesaria la contraseffa, por lo tanto, solo seleccione Aceptar para iniciar la
sesién.
El entorno inicial muestra las bases de datos implementadas en MySQL, asi como el Explorador de
objetos, Explorador de datos, Diagrama y Editor SQL; este ultimo permitiré ejecutar instrucciones
ysat.
‘ete Eat Scr Yer Emote ———
2OeInK BB aide to LB eo
xeon nos “Diagn kétrsQL
cabo des
1. formation cher ae de dts)
3 mt nommionschoms 37am
pefomanceschem) mad 2 ssex8 igpum2
Bet Gyetomncnshone 7 aR
@ recat ate °
= erat de Sete)
ease P Proceoe
al Demco xo
nero
vettess BI oesanno.to 0€ aPuicactoNes wee cow pup y mvSoL
1.8 Sentencias MySQL para el objeto de base de datos
Estas sentencias per
base de datos.
.n administrar la informacién de modo que se puede crear y eliminar una
1.8.1 Creacién de una base de datos
‘A. Comentario
La creacién de una base de datos permite implementar una base de datos vacia, préximamente
debe activarla y, luego, crear tablas y objetos necesarios.
B. Sintaxis
CREATE DATABASE [IF NOT EXISTS] NOMBRE_BASE_DATOS
© CREATE: Sentencia de definicién de datos que permite crear un objeto en el servidor de MySQ1L
= DATABASE: Palabra reservada que asociada a la sentencia CREATE permite crear un objeto de
base de datos.
* [IF NOT EXISTS]: Cldusula que permite omitir el error que se ocasionara si la base de datos
existiera en el servidor de MySQL.
* NOMBRE_BASE_DATOS: Se especifica el nombre de la base de datos que desea implementar,
tener en cuenta que dicho nombre no debe tener espacios en blanco ni simbolos.
Caso 1: Crear la base de datos Ventas de forma basica.
create database ventas;
Se debe tener en cuenta que si la base de datos Ventas no existe en el servidor, la sentencia se
ejecuta correctamente; en caso contrario, emitird un mensaje de error y no se continuaré con la
ejecucién de las demés sentencias.
Caso 2: Crear la base de datos Ventas validando su existencia, de forma que valide la existencia de
la misma,
create database IF NOT EXISTS ventas;
La base de datos Ventas se creard solo si no existe en el servidor.
Caso 3: Crear la base de datos Ventas validando la existencia de la misma, de forma que si la base
de datos existe se deberd eliminar,
/* ELiminar 1a base de datos ventas solo si existe */
drop database if exists ventas;
/* Creando 1a base de datos ventas */
create database ventas;
Aleliminar la base de datos en la primera sentencia, no sera necesario validarla en la segunda,CAP. treucoov a MOL
1.8.2 Listar las bases de datos registradas en el servidor
A. Comentario
Una vez creada la base de datos se puede comprobar su existencia haciendo una lista de las
bases que contiene el servidor.
B. Sintaxis
SHOW DATABASES();
Listado de base de datos desde la ventana de Esquemas de MySQL Workbench
SomEMAS
Fier ebjecs
> © information scheme
> © performance schema
> test
> ventas
1.8.3 Activar la base de datos
‘A. Coment
Cuando se crea la base de datos en el servidor de MySQL no se activa de forma automética, esta
activacién es necesaria para crear, modificar o eliminar objetos dentro de la base de datos.
B. Sintaxis
USE NOMBRE_BASE_DATOS;
Caso 1: Activar la base de datos Ventas.
use ventas;
Mostrando en MySQL Workbench la base de datos activa, se muestra resaltada en negrita desde
la lista de base de datos de la ventana SCHEMAS.
0, Fite obects
> © leformaton_schems
> performance schems«BB esannowio oe aputcactones wes cow pw v nysou
1.8.4 Mostrar la base de datos activa
A. Comentario
Cuando se crean objetos dentro de la base de datos, el servidor ejecuta las sentencias enviadas
por el usuario sobre la base de datos activa, por tanto, se debe asegurar que dicha base sea la
correcta,
intaxis
SELECT DATABASE();
Caso: Mostrar el nombre de la base de datos activa desde el servidor MySQL.
USE ventas;
SELECT database();
Se debe tener en cuenta que inicialmente se debe activar una base de datos registrada en el
servidor, luego se puede comprobar sise encuentra activa ono.
1.8.5 Eliminar la base de datos
A. Comentario
La eliminacién de una base de datos del servidor es irreversible, es decir, no podré recuperar la
informacién almacenada en dicha base de datos.
B. Sintaxis
DROP DATABASE NOMBRE_BASE_DATOS;
Caso 1: Eliminar la base de datos Ventas de forma estandar.
DROP DATABASE ventas;
Caso 2: Eliminar la base de datos Ventas condicionando su existencia, es decir, se eliminard si la
base de datos Ventas existe; en caso contrario, emitird un mensaje de advertencia.
DROP DATABASE IF EXISTS ventas;
Al incluir la cldusula IF EXISTS, se verifica que la base de datos exista, si es asi lo eliminara del
servidor MySQL; en caso contrario, emitiré un mensaje de advertencia. Ahora supongamos que la
base de datos Ventas no existe y se desea eliminarla usando la siguiente sentencia:
DROP DATABASE ventas;
Se emitird un error que anulard la ejecucién de las sentencias, finalizando asi su ejecucién. Por lo
tanto, es recomendable colocar la cldusula IF EXISTS en la sentencia DROP DATABASE.ca. wooocconn mse
1.9 Sentencias MySQL para el objeto tabla
Estas sentencias permiten administrar el objeto de tipo tabla dentro de una base de datos activa. Se
debe tener en cuenta que para activar una base de datos se debe usar la sentencia USE
1.9.1 Motor de almacenamiento
‘A. Comentario
El motor de almacenamiento tiene la misién de almacenar, administrar y recuperar informacién
contenida en una tabla; actualmente existen muchos motores que realizan las mismas tareas, la
diferencia entre ellos es la velocidad y el escenario donde se ejecutard la aplicacién. Entre los
motores més usados tenemos MyISAM e InnoDB.
© Motor MyISAM.
Es considerado como el motor por defecto y es comiinmente usado para administrar las
consultas de la sentencia SELECT de MySQL.
Para poder asignar el motor MyISAM, se debe seguir el siguiente formato:
CREATE TABLE Nonbre_de_la_tabla(
colunnat tipo,
Colunnaz tipo,
Colunnan tipo
) ENGINE=MyISAM;
‘También se debe considerar que cuando no se coloca la cléusula ENGINE se toma por defecto
el motor MyISAM. Veamos la implementacién de la tabla Cliente que cuenta con las columnas
identificador de cliente, nombres, apellidos y su correo electrénico.
CREATE TABLE if not exists cliente (
Adcliente INT,
nombres VARCHAR (30),
apellidos VARCHAR (30),
email \VARCHAR (50)
) ENGINE=HyISi
© Motor InnoDB
Se recomienda su aplicacién cuando se realice transacciones, ya que estas podrén asegurar su
registro con commit y cancelar con rollback. Estas caracteristicas aumentan el rendimiento para
gestionar miltiples usuarios.
CREATE TABLE if not exists cliente (
Adcliente Int,
nombres VARCHAR (30),
apellidos VARCHAR (38),
enail VARCHAR (50)
) ENGINE = InnoDB ;1.9.2 Tipos de datos
Entre las partes que componen una tabla de base de datos de MySQL se presenta la especificacién
del tipo de datos, es decir, qué valor ser soportado por dicha columna. Para tomar una decision
del tipo de datos adecuado para cada columna, se recomienda r
Numéricos enteros
Tinyint
Smalint
Mediumint
Bigint
Integer
la siguiente tabla:
‘Sus valores se encuentran ene Oy 1.
CObjetiv: Declarar una variable de bandera que solo acepte los valores 1 y 0
Doclaracién: bandera bit
Valor registrado: 1 0
‘Sus valores se pueden dar en rango di
0.2 255 cuando no tiene signo.
428 a +127 cuando tiene signo y de
‘Odjetivo: Dociarar una variable para el registro de una nota de un alumno.
Declaracién: nota tiayint
Valor registrado: 20
‘Sus valores se pueden dar en rango de -32768 a +32767 cuando tlene signo
y de 0 a 65535 cuando no tiene signo.
djetivo: Declarar una variable para registrar la cantidad comprada de un
CAP nowccon a mSQL
1.9.11 Asignacion de la Ilave primaria
A. Comentario
La llave primaria, también conocida como principal o simplemente clave, permite definir un
identificador Gnico en una tabla. Una o mas columnas pueden ser declaradas como llave dentro
de una misma tabla. Considere que una columna declarada como campo clave no podré registrar
valores repetidos.
Primera forms
de las columnas.
a asignacién de llave primaria se realiza directamente sobre la implementacién
CREATE TABLE nonbre_de_la_tabla(
Columnal — tipo_datos NOT NULL PRIMARY KEY,
Colunnaz tipo_datos,
Colummas — tipo_datos
‘Segunda forma: La asignacién de llave primaria se realiza al finalizar la implementacién de las.
columnas de la tabla.
CREATE TABLE nombre_de_la_tabla(
Colunnal — tipo_datos NOT NULL,
Colunna2 —_tipo_datos,
Colunna3 tipo _datos,
PRIMARY KEY (Columnal)
Tercera forma: La asignacién de la llave primaria se res
crea inicialmente de forma bésica.
alterando la tabla, es decir, la tabla se
CREATE TABLE nonbre_de_1a_tabla(
Columnal —tipo_datos NOT NULL,
Columna2 —_tipo_datos,
Columna3 tipo_datos
5
ALTER TABLE nombre de_la tabla
ADD PRIMARY KEY (Colunnal);
Caso: Implementar la tabla Producto dentro de la base de datos Venta con las siguientes
caracteristicas:
* Cuenta con un cédigo de cinco caracteres el cual inicia con la letra P y un niimero consecutivo
de la siguiente forma: P0001; no debe permitir el registro de valores nulos, es la llave primaria
dela tabla.
+ La descripcién del producto puede tener un maximo de 50 caracteres, no debe permitir el
registro de valores nulos y dichos valores deben ser tnicos.
+ El precio del producto tiene un maximo rango de $ 99,999.99 y, ademés, no debe permitir el
registro de valores nulos.+ El stock del producto representard la cantidad de productos a registrar y, ademas, no debe
permitir el registro de valores nulos.
+ La fecha de vencimiento del producto se encuentra registrada en el mismo empaque del
producto, no es necesario su registro.
1_FRDUCTO OAS)
DESCRIPCION VARCHAR)
PRECIO DECIMAL 8.2
o srocx mr)
DFEOMAYENC DATE
La solucién se ha dividido en tres versiones, asi como los formatos presentados anteriormente:
/* PRIMERA VERSION: Asignacién de campo clave directamente */
7* Validando 1a existencia de 1a tabla Producto */
DROP TABLE IF EXISTS productos
/* Creando 1a tabla Producto */
CREATE TABLE producto(
TD_PRODUCTO —CHAR(S) NOT NULL PRIMARY KEY,
DESCRIPCION VARCHAR (50) NOT NULL UNIQUE,
PRECIO DECIMAL(8,2) NOT NULL,
stock INT NOT NULL,
FECHA_VENC Dare
15
/* Verificando 1a estructura de 1a tabla Producto */
DESCRIBE PRODUCTO
(7 SEGUNDO. VERSIC
columas */
/* Validando 1a existencia de 1a tabla Producto */
DROP TABLE IF EXISTS productos
Asignacién de campo clave al final de 1a definicién de las
/* Creando 1a tabla Producto */
CREATE TABLE producto(
D_PRODUCTO —CHAR(S) NOT NULL,
DESCRIPCION VARCHAR (5®) NOT NULL UNIQUE,
PRECIO DECIMAL(8,2) NOT NULL,
stock INT NOT NULL,
FECHA_VENC DATE,
PRIMARY KEY(ID_PRODUCTO)
ds
/* Verificando 1a estructura de 1a tabla Producto */
DESCRIBE PRODUCTO;
/* TERCERA VERSION: Alterando 1a tabla para asignar el campo clave */
7+ Validando 1a existencia de 1a tabla Producto */
DROP TABLE IF EXISTS productos
/* Creando 1a tabla Producto */
CREATE TABLE producto(CAP. 1: Ivrmoouccién au MySQL
D_PRODUCTO ——CHAR(5) NOT NULL,
DESCRIPCION VARCHAR (5®) NOT NULL UNIQUE,
PRECIO DECIMAL(8,2) NOT NULL,
Tock Int NOT NULL,
FECHA_VENC pare
%
/* Nodificando 1a tabla Producto */
ALTER TABLE producto
‘ADD PRIMARY KEY (1D_PRODUCTO);
/* Verificando 1a estructura de 1a tabla Producto
DESCRIBE PRODUCTOS
1.9.12 Visualizar la estructura de la tabla desde MySQL-Front y MySQL Workbench
© MySQL-Front
1, Ejecute las siguientes sentencias en el editor de MySQL Front:
DROP TABLE IF EXISTS producto;
CREATE TABLE producto(
D_PRODUCTO —CHAR(5) NOT NULL PRIMARY KEY,
DESCRIPCION VARCHAR (5) NOT NULL UNIQUE,
PRECIO DECIMAL(8,2) NOT NULL,
stock INT NOT NULL,
FECHA_VENC Dare
2. Desde el menti de opciones de MySQlL-Front seleccione Ver > Diagram.
3. Arrastre la tabla desde el explorador (F11).
‘© MySQL Workbench
1. Ejecute el siguiente script para la implementacién de la tabla:
DROP TABLE IF EXISTS productos
CREATE TABLE producto(
D_PRODUCTO —CHAR(S) NOT NULL PRIMARY KEY,
DESCRIPCION VARCHAR (5) NOT NULL UNIQUE,
PRECIO. DECTMAL(B,2) NOT NULL,
‘stock INT NOT NULL,
FECHA_VENC DATE
DF
ia2. Desde el meni de opcién seleccione Database > Reverse Engineer.. (Ctri+R). En la ventana
solo seleccione Next, ya que todo se encuentra configurado.
Nene tteat bene tat TO
‘ever emer he na
3. La ventana muestra la conexién correcta y la obtencién de los datos de la base, aqui solo
seleccione Next.
eeong enw nate Pre een,
RenSocloposcsencssrbn
Seman
(Shee Sat a
(© onc. Caste nsEn la ventana, active el visto de la base de datos que necesita mostrar su diagrama.
Soc Schema to Ree tant
(Getter tte
om
vw
vwenis
5. En la ventana solo podrd observar que todo el proceso de ingenieria y reingenieria ha sido eje-
cutado correctamente, seleccione la opcién Next para mostrar la ultima ventana del asistente.EEE oesnnotso 0 apticactones wea con pup y mrsoL
Para visualizar, seleccione Execute para mostrar las tablas asociadas a la base de datos activa.
F acne
0 FRDUCTO.OHRKS)
DeSPCION VAROUIS)
recto vena (2)
ostox aris)
OFA MENCORTE
13 Asignacién de la llave forinea
‘A. Comentario
La asignacién de una llave fordnea implementa una base de datos relacional. Normalmente se
aplica en una columna de a tabla secundaria. Uno de los requisitos es que tanto la clave primaria
‘como la fordnea deben ser del mismo tipo y tamajio,
Sintaxis
ALTER TABLE nonbre_de_la_tabla
‘ADD FOREIGN KEY (columna_actual)
REFERENCES tabla_asociada(colunna_asociada) ;CAP 4 hoocoan a MrSOL
Caso: Ver el caso donde se implementa la relacién entre la tabla Producto y DetalleBoleta dentro
de la base de datos Ventas con las siguientes caracteristicas:
* Latabla Producto cuenta con las columnas eédigo de producto de 5 caracteres, descripcién de
50 caracteres, precio unitario de tipo decimal, stock de tipo entero y la fecha de vencimiento
de tipo fecha, siendo el campo clave la columna cédigo del producto.
La tabla DetalleBoleta cuenta con las columnas ntimero de boleta de tipo entero,
cédigo del producto de 5 caracteres y la cantidad comprada de tipo entero, tal como
se muestra en la siguiente imagen:
/* Validando 1a existencia de 1a tabla Detallesoleta */
DROP TAGLE IF EXISTS detalleBoleta;
/* Creando 1a tabla DetalleBoleta */
CREATE TABLE detalleBoleta(
NUMBOLETA INT NOT NULL PRIMARY KEY,
D_PRODUCTO ——CKAR(S) NOT NULL,
‘CANTIDAD INT NOT NULL
s
/* Agregando 1a Llave fordnea a 1a tabla DetalleBoleta */
ALTER TABLE detallesoleta
‘ADD FOREIGN KEY (id producto) REFERENCES producto (id producto) ;
/* Verificar 1a estructura de 1a tabla Detallesoleta */
DESCRIBE detalleBoleta;
1.9.14 Implementacion de un esquema de base de datos
Se implementa el modelo relacional de la base de datos Ventas2015, el cual permitird tener el
control de los productos, clientes, distrito de los clientes, boletas y detalles del mismo, la siguiente
imagen muestra el diagrama de la base de datos Ventas2015:(rp peepucTo ons)
Ten paraeeri 2 DESGRPCION vAROURISE)
G tp prucro owas) ereannecie ts
on BoA ocieen%0 nett) Soseeot
FEO ENC OTE
es
oe | | —
“tone one
creer | 7 SS
Sa,
ccsaany
er pismaroown)
onua vecwnsa) |
Tener en cuenta lo siguiente:
= Se debe asignar las llaves primarias a todas las tablas, tal como se especifica en el diagrama
anterior. Solo en el caso de la tabla DetalleBoleta se especificaran dos llaves primarias.
* El nmero de boleta de la tabla Boleta serd un valor numérico autoincrementado que iniciaré
desde el valor uno,
7* Creando 1a base de datos Ventas2015 */
DROP DATABASE IF EXISTS VENTAS2015;
CREATE DATABASE VENTAS2015;
7+ Activando 1a base
USE VeNTAs2015;
datos Ventas2015 */
13" INPLEMENTANDO LA TABLA PRODUCTO ***/
7* Validando 1a existencia de 1a tabla Producto */
DROP TABLE IF EXISTS productos
7+ Creando 1a tabla Producto */
CREATE TABLE producto(
‘TD_PRODUCTO cHAR(S) NoT NULL,
DESCRIPCION VARCHAR (52) NOT NULL,
PRECTO DECIMAL (8,2) NOT NULL,
STOCK INT NoT NULL,
FECHA_VENC DATE
v3
/* Agregando 1a Mave primaria */
ALTER TABLE producto ADD PRIMARY KEY (ID_PRODUCTO) ;
/4** INPLEMENTANDO LA TABLA DISTRITO ***/
/* Validando 1a existencia de 1a tabla Distrito */
DROP TABLE IF EXISTS distritos
/* Creando 1a tabla Distrito */
CREATE TABLE distrito(cart: tnoncconmn mar
TO_DISTRITO CHAR (3) NOT NULL,
DESCRIPCION —_VARCHAR(S@) NOT NULL
ys
/* Agregando 1a Lave prinaria */
ALTER TABLE distrito ADD PRINARY KEY (ID_OISTRITO);
{79 INPLENENTANDO LA TABLA CLIENTE ***/
/* Validando 1a existencia de la tabla Clientet/
ROP TABLE IF EXISTS cliente;
/* Creando 1a tabla Cliente */
CREATE TABLE cliente
1D_CLIENTE ‘CHAR (5) NOT NULL,
NomBRES VARCHAR (38) NOT NULL,
PATERNO VARCHAR (38) NOT NULL,
MATERNO VARCHAR (38) NOT NULL,
DIRECCION VARCHAR (48) NULL,
FoNo CHAR (15) NULL,
ID_DISTRITO CHAR (3) NOT NULL,
EMAIL. VARCHAR (58) NULL
%
7 Agregando 1a lave primaria */
ALTER TABLE cliente ADD PRIMARY KEY (ID_CLIENTE);
7/* Agregando 1a Mave fordnea a 1a tabla Cliente */
ALTER TABLE cliente
‘ADD FOREIGN KEY (ID_DISTRITO)
REFERENCES distrito (ID_DISTRITO);
(/** INPLEMENTANDO LA TABLA BOLETA ***/
/* Validando 1a existencia de 1a tabla Boleta*/
DROP TABLE IF EXISTS boleta;
7 Creando 1a tabla Boleta */
CREATE TABLE boleta(
NUM_BOLETA, INT AUTO_INCREMENT,
FECHA pate NoT NULL,
10_CLIENTE CHAR (5) NOT NULL,
PRIMARY KEY (NUM_BOLETA)
%
/* Para reinicializar el numero autoincrenentado
ALTER TABLE GOLETA AUTO_INCREMENT 1;
”
/* Agregando 1a Mave fordnea a 1a tabla Boleta */
ALTER TABLE boleta
‘ADD FOREIGN KEY (10_CLIENTE)
REFERENCES cliente (ID_CLIENTE);
(/7** INPLENENTANDO LA TABLA DETALLEBOLETA ***/
/* Validando 1a existencia de 1a tabla DetalleBoleta */
DROP TABLE IF EXISTS detalledoleta;
/* Creando 1a tabla DetalleBoleta */
CREATE TABLE detallesoleta(
NUM_BOLETA INT NOT NULL,
TD_PRODUCTO ——_CHAR(5) NOT NULL,
caNTIDAD INT NOT NULL’
%DESARROLLO DE APLICACIONES WEB CON PHP Y MYSOL
7* Agregando las Llaves primarias */
ALTER TAGLE detallegoleta
‘ADD PRIMARY KEY (NUM_BOLETA,ID_PRODUCTO) ;
/* agregando as llaves fordneas de 1a tabla Detallesoleta */
ALTER TABLE detalleBoleta
‘ADD FOREIGN KEY (ID_PRODUCTO) REFERENCES producto (ID_PRODUCTO);
ALTER TABLE detalleBoleta
‘ADD FOREIGN KEY (NUM_BOLETA) REFERENCES boleta (NUM_BOLETA);
/7* INSERTANDO REGISTROS EN LAS TABLAS **/
7* Insertando registros a 1a tabla Distrito
INSERT INTO DISTRITO VALUES("L@1',,“CERCADO' );
INSERT INTO DISTRITO VALUES(L@2", “ANCON' );
INSERT INTO DISTRITO VALUES('L@3", “ATE");
INSERT INTO DISTRITO VALUES(*L@4",, "BARRANCO' );
INSERT INTO DISTRITO VALUES('LOS", “BRENA') ;
INSERT INTO DISTRITO VALUES('L@6",, “CARABAYLLO" );
INSERT INTO DISTRITO VALUES(*L@7", “COMAS") ;
INSERT INTO DISTRITO VALUES('L@8" ,‘CHACLACAYO" );
INSERT INTO DISTRITO VALUES('L@9",, “CHORRILLOS");
INSERT INTO DISTRITO VALUES('L10", "EL AGUSTINO’ };
INSERT INTO DISTRITO VALUES(‘L11", ‘JESUS MARIA‘);
INSERT INTO DISTRITO VALUES(*L12" "LA MOLINA");
INSERT INTO DISTRITO VALUES(L13", "LA VICTORIA’);
INSERT INTO DISTRITO VALUES(*L14", “LINCE");
INSERT INTO DISTRITO VALUES(*L15", "LURIGANCHO" );
INSERT INTO DISTRITO VALUES(‘L16",,"LURIN');
INSERT INTO DISTRITO VALUES(*L17" ,"MAGOALENA" );
INSERT INTO DISTRITO VALUES(L18",, “MIRAFLORES");
INSERT INTO DISTRITO VALUES('L19", "PACHACAMAC" );
INSERT INTO DISTRITO VALUES('L20",,"PUCUSANA' );
/* Insertando registros a 1a tabla Productos */
INSERT INTO PRODUCTO VALUES (‘P0001', "PYE DE MANZANA’, 20,500, '2015/05/14");
INSERT INTO PRODUCTO VALUES ("P0002', “TORTA DE CHOCOLATE’ ,45,100, 2615/07/04");
INSERT INTO PRODUCTO VALUES ("P0003", "TORTA TRES LECHES' , 32,40, '2@15/06/24");
INSERT INTO PRODUCTO VALUES ("P0804", ‘MOUSE DE MANZANA' 35,70, 2015/09/06");
INSERT INTO PRODUCTO VALUES ("PO005' ,“ARROZ CON LECHE-ENVASE ESPECIAL’ ,13 00,40, 2615/11/08");
INSERT INTO PRODUCTO VALUES ("P0O06', "MAZAMORRA MORADA' ,1.50,70, "2015/12/04"
INSERT INTO PRODUCTO VALUES ("P0007", "YOGURT ARABE' , 3,100, '2015/05/08");
INSERT INTO PRODUCTO VALUES ("P0008", "PAN CON POLLO’ ,2.00,500, '2015/26/@5");
INSERT INTO PRODUCTO VALUES ("P0009", “BROMNIE’,3,300, 2615/05/04");
INSERT INTO PRODUCTO VALUES ("P0010", "BESO DE MOZA', 1,40, '2015/06/03");
INSERT INTO PRODUCTO VALUES (‘P00I2", "PYE DE LIMON" ,2.78, 100, '2015/05/02");
INSERT INTO PRODUCTO VALUES ("P0012', "TORTA DE NARANIA’ 16,10, 2615/04/07");
INSERT INTO PRODUCTO VALUES (‘P0O13", "TORTA DE FRESA' , 41,100, '2015/05/87');
INSERT INTO PRODUCTO VALUES ("P0014", ‘ALFAJORES' ,@.30,480, '2015/04/@6");
INSERT INTO PRODUCTO VALUES ("P0035', "CHOCOTEJAS' 2,100, 2015/04/14");
INSERT INTO PRODUCTO VALUES ("P0016", “SUSPIRO A LA LIMEMIA' ,3.50,100, '2015/@6/12");
/* Insertando registros a 1a tabla Cliente */
INSERT INTO CLIENTE VALUES ("C@001", "CARLOS’ "LOPEZ", "HURTADO",
Calle E1 Pino 346°, "4677352", "L021", ‘[email protected] ');
INSERT INTO CLIENTE VALUES ('C@002",,"FRIDA', “QUTROZ' ,“OUARTE",,
"Ir. Los Reyes 475 ', "6734732" ,'LO6' , “[email protected] ' );
INSERT INTO CLIENTE VALUES ("C®003" , "ALEJANDRO" , “TRAUCO", 'NANRIQUE'
"Ir. Hudscar 956", "4676732" ,"L@4", ‘[email protected] ');
INSERT INTO CLIENTE VALUES ("C@004", "CARLA', "BLANCO", ‘RUIZ',
“Av. Arequipa 451", '4867438" ,'Le3" ,“cblancoghotmail.com');
INSERT INTO CLIENTE VALUES ('C800S" , ‘CORINA’, ‘NENDOZA',, "PEREZ",INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INTO
INTO
INTO
INTO
INTO
INTO
Into
INTO
INTO
CLIENTE
CLIENTE
CLIENTE
CLIENTE
CLIENTE
CLIENTE
cLIENTE
CLIENTE
CLIENTE
INSERT INTO CLIENTE
“Av. Ingenieros 111° ,'2548965', 'L09", "enendozaghotmail.con');
VALUES (
VALUES (
VALUES (
VALUES (
VALUES (
VALUES (
VALUES (
VALUES (
VALUES (
"C0006", "JORGE", "RODAS", *DIONICTO",
"Ir. Las Liras 456", '4789658" , "L@3", * jrodasGignail..com’ );
"C0007", “ORLANOO", “CUEVAS", "CABANILLAS',
‘Calle La Encantada 425' ,'5698532', "L411", ‘ocuevasfperu. con’
"C008", “ANTUANE' , ‘ROORIGUEZ' ‘ALARCON’ ,
wv. Dorado 347" , 4589732" ,"LOS" , ‘arodriguez@hotmail com");
"C0009", "MANUEL", "SUAREZ", "FERNANDEZ" ,
ar. Los Robles 854", "4576738", "L19" , ‘msuarezGgnail..com');
(C0010" , "JUAN", "GUTIERREZ", ‘DIAZ
‘calle Girasoles 456" ,'4997421", "L14", "gutierrexghotnail con’ );
*co@12", "CARLOS', ‘COLAN’ , ~BARDALES’,
av. Los Héroes 895°, "3698574", 'L19', “ccolandperu.com" );
"C0012", "NARTIN', "CARRILLO", "SALAS",
‘Calle Los Huertos’ 844", "8965952" ,"LeB®, ‘[email protected] ' );
"coe13", "JOSE", "LAZARTE", "LUJAN",
‘Ir. Agapito 452°, "1258965" ,"L17", *[email protected] ’);
(C0018",, "VIDAL", "ZORRILLA' , "RODRIGUEZ" ,
“av. Héroes del cenepa 635" ,'1547894", 'L20", 'vzorrlaghotmai con’);
VALUES (
“ar.
"C0015", "GUILLERMO' , "RAMOS", ‘FLORES
Las Almendras 211°, "4587964", 'L@3", ‘[email protected] ’);
/* Insertando registros a 1a tabla Boleta */
BOLETA(fecha,1d_cliente) VALUES (*2015/01/10', ‘Coe11");
INSERT
INSERT
INSERT.
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT.
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INTO
INTO
INro
INTO
INTO
INTO
INTO
INTO
INTo
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
BOLETA(Fecha, id cliente) VALUES (*2615/01/20'
C0002");
BOLETA(Fecha, 1d_cliente) VALUES (*2015/01/20" , “Ceee1");
BOLETA(fecha, id cliente) VALUES ("2015/01/23 "C0005" );
BOLETA(fecha, id_cliente) VALUES (*2015/02/16" , ‘Coee1");
BOLETA(fecha, id_cliente) VALUES (*2015/02/20" , *Co002");
BOLETA(Fecha,id_cliente) VALUES (*2015/03/05', "Ca006");
BOLETA( fecha, id_cliente) VALUES ("2015/03/24", "C0006" );
BOLETA(Fecha, id_cliente) VALUES ('2015/04/20" , ‘Coees");
BOLETA(fecha, id_cliente) VALUES (*2025/04/20", ‘Coe11");
BOLETA(fecha, id_cliente) VALUES ('2015/05/16" , "C006" );
BOLETA(fecha, id_cliente) VALUES (*2015/06/20)
C0006");
BOLETA(fecha, id cliente) VALUES (*2015/07/20" , ‘Coee1');
BOLETA(Fecha, id cliente) VALUES ('2015/07/26" , ‘C@e26");
BOLETA(fecha, id_cliente) VALUES (*2015/07/20" , "C0006" );
BOLETA(fecha, id_cliente) VALUES (*2015/07/20" , ‘Coee5");
BOLETA( Fecha, id_cliente) VALUES (*2015/08/16" , "C@e02");
BOLETA(fecha, id_cliente) VALUES (*2015/09/85', *Coe12");
BOLETA(fecha, id_cliente) VALUES ('2015/10/20" , "C0026" );
BOLETA(fecha, id_cliente) VALUES ("2025/11/27 , C0014");
BOLETA(fecha, 1d_cliente) VALUES (*2015/11/85' , *C@ee2");
BOLETA(Fecha, id_cliente) VALUES (*2015/11/26" , ‘Caee1");
/* Insertando registros a 1a tabla detallesoleta*/
DETALLEBOLETA VALUES (1, "P9005", 10);
INSERT.
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
DETALLEBOLETA VALUES (1,
Peet", 20);
DETALLEBOLETA VALUES (2, "P0002" ,20);
DETALLEBOLETA VALUES (2, "P9005", 10);
DETALLEBOLETA VALUES (2,
'p9e@3" 15);
DETALLEBOLETA VALUES (3, 'P0005"; 19);
DETALLEBOLETA VALUES (4, ‘Po0et", 19);
DETALLEBOLETA VALUES (4, ‘Pe0e5", 15);
DETALLEBOLETA VALUES (4, ‘Pe0e3", 12);
DETALLEBOLETA VALUES (5,
P9ee2" 515);
DETALLEBOLETA VALUES (5, "P0005", 10);
DETALLEBOLETA VALUES (6, "P0003",19);
DETALLEBOLETA VALUES (7, "P@e@2" 11);
DETALLEBOLETA VALUES (8, "Pode1",10);INSERT INTO DETALLEGOLETA VALUES (9, "P0005" ,11);
INSERT INTO DETALLEBOLETA VALUES (10, "Pa@1S",12);
INSERT INTO DETALLEBOLETA VALUES (11, "P8002", 11);
INSERT INTO DETALLEBOLETA VALUES (11, P9005" ,15
INSERT INTO DETALLEBOLETA VALUES (12, "P0003", 19);
INSERT INTO DETALLEBOLETA VALUES (12,"PA@15",15);
INSERT INTO DETALLEBOLETA VALUES (13, P0005" ,11
INSERT INTO DETALLEBOLETA VALUES (13, "P0002", 12);
INSERT INTO DETALLEGOLETA VALUES (14, "P9005", 19);
INSERT INTO DETALLEBOLETA VALUES (15, "P8803", 12);
INSERT INTO DETALLEBOLETA VALUES (16,
INSERT INTO DETALLEBOLETA VALUES (17,
INSERT INTO DETALLEBOLETA VALUES (18, "PA@05",21);
INSERT INTO DETALLEBOLETA VALUES (18, 'P0004" ,12
INSERT INTO DETALLEBOLETA VALUES (19,
INSERT INTO DETALLEBOLETA VALUES (20, 'Pa@15",30);
INSERT INTO DETALLEBOLETA VALUES (21, P0005", 30);
INSERT INTO DETALLEBOLETA VALUES (22, "P9001", 20);
/* Listando todos los registros */
SELECT * FROM CLIENTE;
SELECT * FROM DISTRITO;
SELECT * FROM PRODUCTO;
SELECT * FROM DETALLEBOLETAS
SELECT * FROM BOLETA;
1.10 Sentencia de Manipulacion de Datos (SMD)
Las sentencias de manipulacién corresponden al manejo de todos los datos que se pueden registrar
en tablas previamente implementadas.
1.10.1 Sentencia INSERT
A. Comentario
Permite insertar registros en una tabla de una base de datos activa. Se debe considerar los
siguientes aspectos:
* Si desea reemplazar la fila registrada, primero debe eliminarlo con la sentencia DELETE 0
TRUNCATE TABLE; de otra manera se ocasionara un error de duplicidad debido al valor Unico
especificado en la llave primaria.
* Si desea actualizar la fila registrada, debe usar la sentencia UPDATE condicionando el campo
clave, ya que es la Unica forma de identificar a una fila especifica.
* Cuando es ejecutada la sentencia INSERT y uno de los registros tiene algtin error, el proceso de
insercién se detiene y no se ejecutan las demas sentencias,
* Sino especifica un valor en una columna declarada como VARCHAR o TEXT, el motor de base
de datos cargard dentro de estas columnas una cadena de longitud 0. Considere también las
restricciones implementadas a dichos campos.
* Cuando se insertan valores dentro de una tabla y no se especifica las columnas a registrar,
deberd colocar todos los valores obligatorios de la tabla; en caso contrario, se tendré que
especificar las columnas involucradas.CAP. 1: Inrmoouccion an mSQL A
B. Sintaxis
INSERT INTO
TABLA [(Lista de columnas)]
VALUES (‘Lista de Valores")
+ INTO: €s la palabra clave que se usa entre el INSERT y Ia especificacion de la tabla destino,
+ TABLA: Es el nombre de la tabla destino, es decir, la que recibird los datos.
* Lista de columnas: Esta permite especificar las columnas que tendran un valor de registro, esta
a su vez define el orden de ingreso de dichos valores.
* VALUES (‘Lista de Valores’): Aqui se registran los valores segtin las columnas especificadas en
la tabla destino. Se pueden registrar valores separados por comas y especificar funciones de
acuerdo a la capacidad deciarada en la columna, por ejemplo, DEFAULT.
Caso 1: Ver algunos casos especificos de insercién de registros si se tiene la tabla Producto
implementada tal como se muestra en la siguiente imagen:
1 FREOUCTOONRIS)
DESCURCION vAROWRISE)
ommecio pen. @.2)
osteo arcs)
FEO ENC OATE
Insercién de registros sin especificar las columnas de la tabla.
INSERT INTO PRODUCTO
VALUES (*P90@1", 'PYE DE MANZANA' 20,500, '2015/05/14");
Caso 2: Insercién de registros especificando los nombres de las columnas de la tabla,
INSERT INTO PRODUCTO (id_producto, descripcion,precio, stock, fechavenc)
VALUES ("P@0@1', 'PYE DE MANZANA' 20,508, '2015/05/14");
Caso 3: Insercién de registros con especificacién de valores por defecto.
INSERT INTO PRODUCTO
VALUES (*PQ001", 'PYE DE MANZANA', 20,500, default);
Caso 4: Insercién de registros con una columna tipo fecha. Debe considerar que se registra el
afio, mes y dia, respectivamente.
INSERT INTO PRODUCTO
VALUES (*POG@1", "PYE DE MANZANA", 20,500, "2015/05/14");vee BI oesanno.to 0€ aruicactones wes cow pup y mvsat
Caso 5: Insercién de registros con especificacién del valor de autoincremento. Aqui es necesario
‘especificar las columnas para registrar un valor. La columna que tiene el valor de autoincremento
No seré especificada. Suponiendo que el id_producto es declarado como autoincremento,
entonces el registro del producto sera de la siguiente manera:
INSERT INTO PRODUCTO (descripcion,precio, stock, fecha_venc)
VALUES ("PYE DE MANZANA', 20,500, '2615/05/14");
1.10.2 Sentencia UPDATE
A. Comentario
La sentencia UPDATE permite modificar 0 actualizar un conjunto de registros de una tabla. Estos
cambios dependeran directamente de una condicién sobre una o mas columnas de la tabla. Se
debe considerar los siguientes aspectos:
+ Sila sentencia de actualizacién infringe una restriccién, una regla osiel nuevo valor es de un tipo
de datos incompatible al declarado en la tabla; se cancela la instruccién dando como resultado
un mensaje error y no actualiza ningun registro de la tabla,
* La sentencia UPDATE es susceptible a errores aritméticos, que podria ser un error de
desbordamiento o divisién por 0 durante la evaluacién de la expresién, la actualizacién no se
lleva a cabo mostrando en este caso un mensaje de error y corta la actualizaci6n desde el punto
de error; a diferencia del primer punto este si actualiza los registros hasta donde se ocasioné el error.
B. Sintaxis
UPDATE TABLA
SET Colunna = valor 0 expresién
WHERE Condicién;
* TABLA: Aqui se especifica el nombre de la tabla que necesita ser actualizada.
+ SET: Aqui se especifica la o las columinas que se actualizarén en una determinada tabla.
* Columna: Aqui se especifica el nombre de la columna que desea actualizar, solo hay que tener
en cuenta que no se pueden actualizar las columnas con restricciones de autoincremento.
+ Valor o expresién: Puede asignarse un valor directamente pero se debe considerar el tipo de
datos que soporta la columna a actualizar, también puede usarse una expresién pero debemos
considerar que dicha expresién solo emita un resultado.
WHERE: Especifica la o las condiciones que limitarén los valores que se actualizarénCaso 1: Ver algunos casos especificos de insercién de registros si se tiene la tabla Producto
implementada, tal como se muestra en la siguiente imagen:
La empresa ha adquirido el doble de stock de todos los productos y se nos ha encomendado
actualizarlo, Se sabe que inicialmente los productos presentan el siguiente stock:
50906
misino4
s0504
msoros
150624
amis204
Como se observa, el stock de todos los productos se ha duplicado gracias a la sentencia UPDATE.
Se debe tener en cuenta que al no colocar la sentencia condicional WHERE, la instruct
aplicada a todos los registros.
Caso 2: Modificar la fecha de vencimiento del producto cuyo cédigo es ‘P0002’.
UPDATE PRODUCTO
SET FECHA_VENC='2015/10/@5"
WHERE 10_PRODUCTO="Po0@2" ;EEE oeserno110 0¢apticaciones Wee cow xP mvs
Caso 3: Actualizar el precio del producto pye de manzana en un 20 % més de su precio actual.
UPDATE PRODUCTO
‘SET PRECIO=PRECIO#PRECIO*O.2.
WHERE DESCRIPCION = "PYE DE MANZANA’
Caso 4: Actualizar el cédigo de distrito a LO2 a todos los clientes cuyo distrito figure registrado el
valor ‘Cercado’.
or) 1 pIsTATTOOUAC)
OncweRES VARGO) © DESCRIRCION VAROHSE)
OPATERNO WAROHUR() Inderes|
OMATERNO VARORD)
pIRECKION VARCHAR)
oreo owas)
op peearo ont)
Dea VAROWALSO)
UPOATE CLIENTE
‘SET 1D_DISTRITO="Le2"
WHERE ID_OISTRITO=(SELECT ID_DISTRITO
FROM DISTRITO
WHERE DESCRIPCTON='Cercado" );
1.10.3 Sentencia DELETE
A. Comentario
La sentencia DELETE permite eliminar todos los registros especificados en una determinada
tabla. Se debe considerar los siguientes aspectos:
* La sentencia DELETE se puede bloquear cuando se ocasione un error de restriccién FOREIGN
KEY, es decir, se intenta eliminar registros que se encuentren asociados a otras tablas. Si se
presentara este caso, el motor de base de datos envia un error al usuario y no elimina ningtin
registro del script.
* Cuando la sentencia DELETE determina un error aritmético en su proceso, el motor de base de
datos cancela todo el proceso y envia un mensaje de error al usuario,
+ También puede optar por la sentencia TRUNCATE TABLE cuando necesite eliminar todas las filas
de una determinada tabla sin especificar la cldusula WHERE. En este caso, TRUNCATE usa menos
recursos que DELETE, por lo tanto, es mucho mas répida la transacci6n.CAP. noc MOL
B. Sintaxis
DELETE FROM nonbre_tabla
WHERE condicion:
caso
liminar todos los registros de la tabla Producto.
DELETE FROM producto;
Caso 2: Eliminar el producto con cédigo ‘p0002'.
DELETE FROM producto
WHERE id_producto
0002";
caso
liminar los productos cuya fecha de vencimiento sea inferior al dia actual.
DELETE FROM PRODUCTO
WHERE FECHA VENCccunDate()
1.10.4 Sentencia TRUNCATE
‘A. Comentario
Permite eliminar todos los registros de una tabla. Se diferencia con la sentencia DELETE en el
tiempo de respuesta
B. Sintaxis
TRUNCATE nombre tabla;
Caso: Eliminar todos los registros de la tabla Producto.
TRUNCATE producto;
1.11 Consulta basica con la sentencia SELECT
La sentencia SELECT en MySQL es la Gnica que permite consultar informacién de forma que puede
devolver un registro completo de datos 0 un solo valor. Se debe considerar que es la Unica funcién
que permite obtener cualquier tipo de informacién desde las tablas de una base de datos.
1.11.1 Seleccién de datos sin restricciones
‘A. Comentario
Permite realizar una consulta a una determinada tabla sin condicionar la muestra del mismo.B. Sintaxis
SELECT * FROM nonbre_tabla;
El simbolo * representa a todos los registros, asi como todas las columnas de una determinada
tabla.
Caso 1: Listar todos los registros de la tabla Cliente.
SELECT * FROM CLIENTES
Caso 2: Listar todos los clientes de la tabla Cliente usando un alias de la tabla.
SELECT C.* FROM CLIENTE C3
1.11.2 Seleccién de datos limitando las columnas de la tabla
A. Comentario
Este tipo de consulta permite especificar qué columnas se deben mostrar en la consulta.
B. Sintaxis
SELECT columnas FROM nonbre_tabla;
Caso 1: De la tabla Producto, listar las columnas id_producto, descripcién, stock.
SELECT id_producto, descripcion, stock FROM productos
Caso 2: De la tabla Producto, listar las columnas id_producto, descripcion, stock, mostrando la
siguiente cabecera de columnas:CAP 4: moecen a SQL
SELECT 4d producto as ‘cédigo del producto",
descripcion as 'Descripcién del producto’ ,
stock as "Stock de producto’
FROM producto;
1.11.3 Restringir la muestra de datos repetidos
‘A. Comentario
Este tipo de consulta permite listar los registros de una tabla sin repetirse.
B. Sintaxis
SELECT DISTINCT nonbre_columna FROM nonbre_tablas
Caso 1: Mostrar los cédigos de los distritos registrados en la tabla Cliente sin repetir el cédigo
del mismo.
SELECT DISTINCT 1d distrito
FROM cliente;
Caso 2: Mostrar los afios obtenidos desde la fecha de vencimiento de los productos sin repetirse.
SELECT distinct YEAR(fecha_venc)
FROM producto;
1.11.4 Ordenar de forma ascendente o descendente los registros de una tabla
‘A. Coment:
Este tipo de consulta permite ordenar de forma ascendente o descendente los valores de una
determinada columna de una tabla.
B. Sintaxis
SELECT * FROM nonbre_tabla
ORDER BY colunna ASC|DESC;
Caso 1: Listar los productos ordenados en forma ascendente por la descripcién del mismo.
SELECT * FROM producto
ORDER BY descripcion ASC;FEI osanno.io oe apuicaciones wes cow pup y mvs
Caso 2: Listar los productos ordenados en forma descendente por el precio del mismo.
SELECT * FROM producto
ORDER BY precio DESC;
Caso 3: Listar solo los afios obtenidos desde la fecha de vencimiento de los productos. Es
necesario tener en cuenta que no deban repetirse, ademés, deben mostrarse ordenados en
forma descendente,
SELECT distinct year(fecha_venc) FROM producto
ORDER BY year(Fecha_venc) DESC;
1.11.5 Limitar los registros de la consulta
A. Comentario
Este tipo de consulta permitir listar una cantidad de registros a partir de una consulta
B Sintaxis
SELECT * FROM nonbre tabla LIMIT numero registros;
Caso 1: Listar los tres primeros productos registrados.
SELECT * FROM producto LIMIT 3;
Caso 2: Listar los tres productos mas caros que se encuentran registrados.
SELECT * FROM producto ORDER BY precio DESC LIMIT 3;
Caso 3: Listar los tres primeros productos ordenados segin su fecha de vencimiento de forma
ascendente.
SELECT * FROM producto ORDER BY fecha_venc ASC LIMIT 3;
1.12 Combinacién de tablas con INNER JOIN
A. Comentario
La combinacién de tablas permite mostrar informacién cruzada entre dos o mas tablas para
diferentes procesos. Todo proviene de la llave fordnea de una tabla, ya que es la que permitiré
acceder a otra tabla y asi combinarla,
B. Sintaxis
INNER JOIN
ON cap. 4: woouccon a mse EER
Caso 1: Listar la combinacién de registros entre la tabla Cliente y Distrito.
SELECT * FROM CLIENTE C
INNER JOIN DISTRITO D
(ON C.1D_DISTRITO = D.1D_DISTRITO;
TOLALENTE NOMGRES—PATERNO —_WATERNO ORECOON FOND W_DSTATO EMAL TO_DSTRTO _CeSCRFCON
fos 1072 WURTIOD le Pre 6 _errs2 Lon epesthamalcon Lo! cxrcaoo
(coon ROK GUROZ_—_—OUARTE Lene 5 STMTD LO Jases@poucem 0 commer
(coona——AEIMOAOTRALKO—WANRIGLE vrmer ose areTD LOE ncoeyralcon LO sxnnenco
RA BUND RUZ apn S702 LD inesthamatcon U0 ITE
(coo0s CORINA —MENOCZA PEREZ ngewe 1 25406508 ‘mses com 8 ‘Sronmos
WoRGE —ODASDOWCO i Lim se a7 LED a) aE
(cooo7 oman CUEVAS —_CABAMLLAS Clea rend. S02 Semester Ut Uesus MARIA
(coos tune ROOAGUEZ ALARCON ade 37 espn om LS sen
(coo0s ——NAWEL SUAREZ ——_FEROUNDEZ neti OASIS meures@ytcon 118 Pewee
(cooto iN GUTERREZ OZ Cole Groin 56 a5}21L1e joverehal con L16 ince
CARLOS COMM —_BAROALES Lorie 55 DSS L19 extn@pwcon 19 Prewcwuc
12 MARTIN—CARRLIO SALAS Cle on ne 95552 a ‘oucucaro
(coors ose ARTE LUN Apo SES LIT fnmte@yratcon LIT GoALENA
(coota——WoaL__— ZORA ROOAGUEZ Ww Hewes cae 15051 2 aentstarstcon 20 rosa
(coors GuuLeRo Ramos FLORES Ln mene 7189640 a) ATE
‘Como se observa, el resultado muestra todas las columnas de la tabla Cliente de la misma forma
que de la tabla Distrito, pero en dicha combinacién se muestran todos los registros de clientes;
mientras que, los registros de los distritos se limitan a mostrar aquellos que combinan con la
tabla Cliente, es decir, no se listaran los distritos que no tengan asociacién con los clientes.
Caso 2: Listar la combinacién de registros entre la tabla Cliente y Distrito pero con la siguiente
especificacién de columnas: cédigo del cliente, nombres y apellidos, descripcién del distrito,
correo electrénico del cliente; tal como se muestra en la siguiente imagen:
(CODIGO_CLIENTE:
[CARLOS LOPEZ HURTADO
[RIDA QUIROZ DUARTE
[ALEJANDRO TRALCO MANRIQUE
(CARLA BLANCO RUIZ
(CORINA MENDOZA PEREZ (CHORAILIOS
JORGE RODAS DIONIO late
JORLANDO CUEVAS CABANILLAS JESUS MARIA
[ANTUANE RODRIGUEZ ALARCON BRERA
‘MANUEL SUAREZ FERNANDEZ
JUAN GUTIERREZ DIAZ
(CARLOS COLAN BARDALES
\MARTIN CARRILLO SALAS
JOSE LAZARTE LWAN
(VIDAL ZORRILLA RODRIGUEZ
{GUILLERMO RAMOS FLORES
LEFT JOIN
ON Tabla1.colunna = Tablaz.colunna;
Caso 1: Listar la combinacién de registros entre las tablas Cliente y Distrito usando combinacién
Left Join,
SELECT * FROM DISTRITO O
LEFT JOIN CLIENTE C
‘ON D.1D_DISTRITO=C. 1D_OISTRITO;
BADE hows poo _tatee — eREEGON Fee wpSRT oma
ea ee) pine
2S MEO HOE ORS aninmansth SETH UD ——
om BL gmt URE hes oD fawetenon
oz CML SAS Gla Dt center
Alespecificar el cardcter asterisco, en la consulta se indica al servidor que debe mostrar todas las.
columnas y registros a ambas tablas. Por ser una combinacién externa del lado izquierdo, la tabla
Distrito muestra todos sus registros; aqui es donde la tabla Cliente se combina y muestra NULL en
aquellas columnas que no tiene informacién; por ejemplo, el distrito ANCON no registra cliente,
por lo tanto, en la informacién del mismo se muestra NULL en todas sus columnas.Caso 2: Listar la descripcién y el cédigo de los distritos que no tienen registro en la tabla Cliente,
SELECT D.* FROM DISTRITO 0
LEFT JOIN CLIENTE C
ON D.1D_DISTRITO=C. 1D_DISTRITO
WHERE C.1D_CLIENTE IS NULL;
Caso 3: Listar aquellos productos que atin no se registran en un detalle de boleta.
SELECT P.* FROM PRODUCTO P
LEFT JOIN DETALLEROLETA D
‘ON P.1D_PRODUCTO = D.1D_PRODUCTO
WHERE D.1D_PRODUCTO TS NULL;
1.12.2 Combinacién de tablas con RIGHT JOIN
‘A. Comentario
La combinacién con RIGHT JOIN muestra informacién de ambas tablas, y permite que la tabla de
la derecha muestre todos sus registros, lo cual forzara a la tabla de la derecha a mostrar NULL en
aquellos valores que no se combinen.
intaxis
SELECT * FROM
RIGTH JOIN
ON Tablai.colunna = Tabla2.colunna;
Caso 1: Listar la combinacién de registros entre las tablas Cliente y Distrito usando la combinacién
ht Join.
SELECT * FROM CLIENTE C
RIGHT JOIN DISTRITO D
ON C.1D_DISTRITO=D..1D_DISTRITO;
Feo BSR oom BEaRTS aaa
simemee— s petmopeicon =
Dimtimnt ha oman 3 =
sheers OT cmaegution at onc
Stents ems feasteoucm cements
Coenen es ue romomsion ce owascavo
‘A especificar el cardcter asterisco, en la consulta se indica al servidor que debe mostrar todas las
ccolumnas y registros a ambas tablas. Por ser una combinacién externa del lado derecho la tabla
Distrito, muestra todos sus registros. Aqui es donde la tabla Cliente que se encuentra a la izquierda
se combina y muestra NULL en aquellas columnas que no tiene informacién; por ejemplo, el distrito
ANCON no registra cliente, por lo tanto, en la informacién del mismo se muestra NULL en todas sus
columnas.‘ DESARROLLO DE APLICACIONES WEB CON HP Y MYSQL
Caso 2: Listar la descripcién y el cédigo de los distritos que no tienen registro en la tabla Cliente
usando Rigth Join.
SELECT D.* FROM CLIENTE C
RIGHT JOIN DISTRITO D
ON D.1D_DISTRITO=C..1D_DISTRITO
WHERE C.1D_CLIENTE IS NULL;
Caso 3: Listar aquellos productos que atin no se registran en un detalle de boleta usando RIGTH JOIN.
SELECT P.* FROM DETALLEBOLETA 0
RIGHT JOIN PRODUCTO P|
ON P.1D_PRODUCTO = D.TD_PRODUCTO
WHERE D.10_PRODUCTO IS NULL;
1.13 Recuperacién de datos agrupados
La idea de recuperar datos agrupados nace de la necesidad de mostrar informes o reportes a partir
de dichas consultas, por ello, es necesario implementar correctamente los datos agrupados, para lo
cual usaremos la cldusula GROUP BY.
1.13.1 Clausula GROUP BY
A. Comentario
La cléusula GROUP BY agrupa un conjunto de registros de acuerdo a los valores de una o més
columnas de una tabla. Para una mejor implementacién de las consultas agrupadas, se puede
usar las funciones agregadas como SUM, COUNT, MAX, MIN y AVG.
Sintaxis
SELECT columna_a_agrupar.,funcion_agregada
FROM tabla
GROUP BY colunna_a_agrupars
+ Columna_a_agrupar: Aqui se especifica el nombre de la columna a la que se desea crear una
agrupacién. Es necesario considerar que si hay mas de una columna, estas deberén estar
especificadas también en la clausula GROUP BY.
's una funci6n esténdar de MySQL como SUM, COUNT, MAX, MIN y AGV.
* Funcién_agregad
Caso 1: Listar el total de clientes agrupados por el cédigo del distrito, tal como se muestra en la
siguiente imagen:CAP. nec MOL
SELECT 1D_DISTRITO,cOUNT(*)
FROM CLIENTE
GROUP BY ID_DISTRITO;
1.13.2 Funcién agregada COUNT
‘A. Comentario
La funcién COUNT permite contar un determinado nimero de registros segin el criterio
especificado por el usuario, Cuando no se especifica una condicién, la funcién devuelve como
respuesta el total de registros contenidos en la tabla.
B. Sintaxis
COUNT(*) © COUNT(nonbre_colunna);
Caso 1: Determinar el total de clientes registrados, tal como se muestra en la siguiente imagen:
SELECT COUNT(*) AS ‘TOTAL DE CLIENTES'
FROM CLIENTE;
Caso 2: Determinar el total de clientes registrados por cada distrito, tal como se muestra en la
siguiente imagen:DESARROLLO DE APLICACIONES WEB CON PHP Y MYSQL
SELECT D.DESCRIPCION AS "DISTRITO", COUNT(*) AS ‘TOTAL DE CLIENTES'
FROM CLIENTE C
INNER JOIN DISTRITO D
(ON C.1D_DISTRITO = D.10_DISTRITO
GROUP BY D.DESCRIPCION;
Caso 3: Determinar el total de boletas asociadas a los clientes en las cuales se debe mostrar el
nombre completo del cliente, tal como se muestra en la siguiente imagen:
SELECT CONCAT(C.NOMBRES,' ',C.PATERNO," ",C.MATERNO) AS CLIENTE,
‘COUNT(*) AS ‘TOTAL DE BOLETAS’
FROM BOLETA 8
INNER JOIN CLIENTE C
(ON 8.10_CLIENTE = C.1D_CLIENTE
‘GROUP BY CONCAT(C.NOMBRES,' ",C.PATERNO," *,C.MATERNO) ;
La funcién CONCAT permite concatenar 0 unir dos o mas columnas, para este caso se debe unir
el nombre, apellido paterno y materno con un espacio entre ellos.1.13.3, Funcién agregada SUM.
A. Comentario
Permite devolver la suma de todos los valores contenidos en una columna de valores numéricos.
B. Sintaxis
SUM(Colunna o Expresién)
Caso 1: Determinar el numero total de productos que se encuentra en el area de almacén.
SELECT SUM(PRODUCTO.STOCK) AS ‘TOTAL DE PRODUCTOS’
FROM PRODUCTOS
Caso 2: Determinar el monto subtotal por cada boleta, este se dard en base al precio del producto
y la cantidad registrada en el detalle de boleta, tal como se muestra en la siguiente imagen:
SELECT B.NUM_BOLETA, SUM(D.CANTIDAD*P.PRECTO) AS ‘SUBTOTAL'
FROM BOLETA 8
INNER JOIN DETALLEBOLETA D ON B.NUM_BOLETA=D.NUM_BOLETA
INNER JOIN PRODUCTO P ON P.TD_PRODUCTO = D.I0_PRODUCTO
GROUP BY B.NUM_BOLETA;
Caso 3: Determinar el monto total vendido por afios, es decir, se debe listar los afios registrados
en la boleta y el subtotal por cada afio, tal como se muestra en la siguiente imagen:
0 SUBTOTAL
faois _10247.00
SELECT YEAR(B.FECHA) AS “ARO”,
‘SUM(D.CANTIDAD*?. PRECIO) AS “SUBTOTAL*
FROM BOLETA B
INNER JOIN DETALLEBOLETA D ON .NUM_BOLETA=D.NUM_BOLETA
INNER JOIN PRODUCTO P ON P.ID_PRODUCTO = D.ID_PRODUCTO
GROUP BY YEAR(B..FECHA);EBB) osern0110 0 apticaciones wee cow PHP MYsak
1.13.4 Funcién agregada MAX
‘A. Comentario
Esta funcién permite determinar el valor maximo encontrado en una columna de valores
numéricos.
B. Sintaxis
MAX (Colunna o Expresion)
* Columna: Se puede especificar el nombre de una columna de la tabla al buscar el mayor valor.
* Expresion: Representa a una funcién SQL 0 a un juego de operadores aritméticos,
* MAX solo puede ser usado con columnas 0 expresiones que tengan como tipo un entero, en
caso contrario, genera un error proveniente desde el motor de base de datos.
Caso 1: Determinar el pre
més alto registrado en la tabla Producto.
SELECT MAX(PRECTO) AS ‘PRECIO ALTO"
FROM PRODUCTOS
Caso 2: Determinar el monto subtotal mas alto que registre un determinado cliente, tal como se
‘muestra en la siguiente imagen:
SELECT CONCAT(C.NOMBRES,' °,C.PATERNO,' ",C.MATERNO) AS CLIENTE,
NAX(D.CANTIDAD*P.PRECIO) AS ‘SUBTOTAL MAS ALTO”
FROM BOLETA B
INNER JOIN CLIENTE C ON B.10_CLIENTE = C.IO_CLIENTE
INNER JOIN DETALLEBOLETA D ON 8.NUM_BOLETA = D.NUM BOLETA
INNER JOIN PRODUCTO P ON D.1D_PRODUCTO = P.1D_PRODUCTO
GROUP BY CONCAT(C.NOMBRES,* *,C.PATERNO, * *,C.MATERNO);
1.13.5 Funcién agregada MIN
‘A. Comentario
Esta funcién permite deter
ar el valor minimo encontrado en una columna de valores
numéricos 0 una expresién,
B. Sintaxis
MIN (Colunna © Expresion)* Columna: Se puede especificar el nombre de una columna de la tabla al buscar el menor valor.
* Expresion: Representa a una funcién SQL 0 a un juego de operadores aritméticos.
* MIN solo puede ser usado con columnas 0 expresiones que tengan como tipo un entero; en caso
contrario, genera un error proveniente desde el motor de base de datos.
Caso 1: Listar el precio del producto més bajo.
SELECT MIN(PRECIO) AS ‘PRECIO BAJO"
FROM PRODUCTO;
Caso 2: Determinar el monto subtotal més bajo que registre un determinado cliente, tal como se
muestra en la siguiente imagen:
(Mou zoRRMARCOUGEZ 6.00
SELECT CONCAT(C.NOMBRES,’ ",C.PATERNO," ',C.MATERNO) AS CLIENTE,
MIN(D.CANTIDAD*P.PRECIO) AS "SUBTOTAL MAS ALTO"
FROM BOLETA B
INNER JOIN CLIENTE C ON B.1D_CLIENTE = C.1D_CLIENTE
INNER JOIN DETALLEBOLETA D ON B.NUM_BOLETA = D.NUM_SOLETA
INNER JOIN PRODUCTO P ON D.ID_PRODUCTO = P.10_PRODUCTO
GROUP BY CONCAT(C.NOMBRES," ",C.PATERNO," *,C.MATERNO) 5
1.13.6 Funcion agregada AVG
‘A. Comentario
Devuelve el promedio de los valores de un determinado grupo. Se debe considerar que dicha
columna debe ser numérica.
B. Sintaxis
AVG (Columna 0 Expresion)
* Columna: Se puede especificar el nombre de una columna para determinar el promedio,
* Expresion: Representa a una funcién SQL 0 a un juego de operadores aritméticos. No se permite
las funciones de agregado ni subconsultas.see EBB) vesano.io 0 aPuicaciones wes cow PHP myst
Caso 1: Determinar el promedio de precios de todos los productos.
SELECT AVG(PRECIO) AS "PROMEDIO DE PRECIOS'
FROM PRODUCT.
1.13.7 Clausula HAVING
‘A. Comentario
Permite condicionar los resultados a partir de una agrupacién, es decir, evaluard qué registros
debe mostrar después de la agrupacién de valores. Normalmente, HAVING es usado después de
la cléusula GROUP BY.
B. Sintaxis
HAVING
Caso 1: Determinar el monto total vendido en el 2015, tal como se muestra en la siguiente
imagen:
RO SUBTOTAL
os 10297.00
SELECT ‘YEAR(B-FECHA) AS ‘ANlO",
SUM(D.CANTIDAD*P. PRECIO) AS "SUBTOTAL"
FROM BOLETA B
INNER JOIN DETALLEBOLETA D ON B.NUM_BOLETA*D.NUM_BOLETA
INNER JOIN PRODUCTO P ON P.ID_PRODUCTO = D. ID_PRODUCTO
GROUP BY YEAR(B..FECHA)
HAVING AiO = 2015;Integracié6n MySQL
con PHP2.1 Introduccién
PHP es el lenguaje de programacién que soporta muchos gestores de base de datos, pero el mas
usado es MySQL; por ese motivo, se ha implementado un capitulo completo de las principales
funciones de MySQL que servirdn para el desarrollo de los siguientes capitulos.
No se pretende crear una dependencia directa con MySQL sino més bien demostrar la facilidad
de integracién entre MySQL y PHP, ya que estd catalogado como uso popular. En los posteriores
capitulos se hard referencia al acceso que PHP puede tener con PostGre y SQL Server.
2.2 Conectar MySQL a PHP
PHP cuenta con las funciones necesarias para conectarse a distintos motores de base de datos y ahora
conoceremos las principales para integrarlo a MySQL. Es necesario, hasta aqui, tener experiencia
en creacién de base de datos, tablas, relaciones y manipulacién de los datos en MySQL; en caso
contrario, se recomienda leer el primer capitulo de este libro.
2.2.1 Funcién de conexién al servidor MySQL
A. Comentario
Conectarse a un servidor de base de datos conlleva tener ciertos requisitos previos como el
nombre del servidor, el nombre del usuario y su respectiva contrasefia; sin embargo, como se
indic6 en el apartado anterior, si tiene conocimientos previos de MySQL, entonces la sintaxis
mostrada para la conexién al servidor sera sencilla.
8.
jintaxis
mysql_connect ("SERVIOOR' , USUARIO", “CLAVE");
* SERVIDOR: Es el nombre del servidor. Si tiene como servidor a WAMP Server o XAMPP, el
nombre del servidor es «localhost».
* USUARIO: Es el nombre del usuario de la base de datos. En este caso es «root».
* CLAVE: Al iniciar MySQL no asigne alguna clave, por Io tanto, este campo quedara vacio a
‘menos que lo hubiera modificado.
Caso 1: Conectarse al servidor MySQL de forma basica.
Archivo: conexion1.php
‘Se cuenta con el archivo estilo.css incorporado en la misma carpeta del archivo conexion1.php.
body {
font-family: tahona;
font-size: 14;
Caso 2: Conectarse al servidor MySQL mostrando el mensaje «Conexidn satisfactoria» si todo es
correcto; en caso contrario, mostrar el mensaje «No pudo conectarse al servidor».
En caso hubiera algtin error en el servidor, usuario o clave, se mostraré la siguiente imagen:
EB vaneessriaereyms C\/M- core Pl) ia +
rysql_connect( ‘localhost, "root",
Af (1$cn)
echo "No pudo conectarse al servidor
else
echo "Conexién satisfactoria”;
»
En esta conexién agregue directamente el nombre del servidor, del usuario y la clave a la funcién
mysql connect.CaP 2 samen sot cove EB
El resultado de conectarse a la base de datos es un valor booleano que en este caso ha sido
almacenado en la variable $cn que, a su vez, es evaluada en la condicional if para determinar si
todos los datos han sido correctos. Considere la siguiente tabla:
* if (Scn) > devuelve true: conexién correcta
* if (IScn) > devuelve false: conexién incorrecta
Caso 3: Conectarse al servidor emitiendo el mensaje de «Error de conexién», ademés del
comentario interno de PHP sobre el error, solo si hay un error en la conexién, tal como se muestra
en la siguiente imagen:
epee fanmorigh %
©) einen
ss Steal
ror la anedon > Aas dried fr use oot @Wocahost (ung password VES)
Archivo: conexion3.php
$usuario="root';
$claves' woo
4
nysql_connect (Sservidor, Susuario, $clave) or
die(‘Eeror en 1a conexién > *.nysql_error());
La funcién die es la encargada de mostrar un mensaje, ademas de detener la ejecucién de las
demés sentencias PHP.
La funcién mysql_error() permite mostrar un mensaje de error interno entendido por PHP al
momento de conectarse al servidor.
2.2.2 Funcidn de cierre del servidor
‘A. Comentario
‘Toda conexién correcta a un servidor debe ser cerrada para un préximo uso. Mantenerla abierta
conlleva a posibles errores cuando vuelva a conectarse al servidor. Esto es similar a intentar abrir
una puerta cuando se encuentra abierta, ya que lo l6gico seria que primero se cierre dicha puerta
y después se abra
Sintaxis
mysql_close($variable_de_conexién_al_servidor);
Caso 1: Conectarse al servidor mostrando el mensaje «Conexién satisfactoria» si asilo fuera; en.
caso contrario, mostraré «No pudo conectarse al servidor» y, ademés, el mensaje de cerrar la
conexién.Archivo: conexion4.php
/sql_connect( ‘localhost’ , ‘root ',"');
AF (Sen)
echo "No pudo conectarse al servidor";
else
echo “Conexién satisfactoria”;
mysql_close($cn);
»
Caso 2: Conectarse al servidor mostrando el mensaje «Conexién satisfactoria» si asi lo fuera; en
‘caso contrario, mostraré el mensaje «No pudo conectarse al servidor» y, ademas, el mensaje
«Conexién cerrada correctamente», tal como se muestra en la siguiente imagen:
hapncinor Jones hp x
@ eahonttie BH yt © © [EB Gaye
Conexion stisfatorla
Conexion cerrada correctamente..1
Archivo: conexion4.php
<2php
‘Scn=mysq_connect( “localhost, root", **
if (18cn)
echo 'No pudo conectarse al servidor’;
else
echo "Conexién satisfactoria' ;
Sccn-mysql_close($cn);
if (Scen)
‘echo " Conexién cerrada correctamente...1!"5
»
2.2.3 Funcién de seleccién de base de datos desde el servidor
A. Comentario
La funcién mysql_select_db() selecciona una base de datos MySQL existente. Para ello
previamente debe haberse conectado con el servidor MySQL a través de mysql_connect.
Devolveré TRUE si todo se llevé a cabo correctamente o FALSE si se produjo algin fallo.
B. Sintaxis
‘mysql_select_db(nombre_base_de_datos, variable_de_conexion);
+ nombre_base_de_datos: Es el nombre de la base de datos implementada en el servidor actual.
* variable_de_conexior
Es la variable que usa la funcién mysql_connect previamente validada.CaP 2: Incetcox SOL cou PHP
Caso 1: Seleccionar la base de datos Ventas2015 de forma basica.
Archivo: seleccional.php
<1DOCTYPE html>
‘
Caso 2: Seleccionar la base de datos Ventas2015 emitiendo el mensaje «Base de datos
seleccionada correctamente...!!!», en caso contrario, mostrard el mensaje «La base de datos NO
existe».
Archivo: selecciona2.php
‘meta charset
ctitler
'stylesheet">
snysql_error());
J Seleccionando 1a base de datos Ventas2e15 */
$db=nysql_select_db(‘ventas2015" ,$cn);
/* Validando 1a existencia de 1a base de datos */
iF(1$db)
echo ‘La base de datos No existe’;
else
echo ‘Base de datos seleccionada correctamente..!!!"5
/* Cerrando 1a conexisn */
nysql_close($en)3
>
DESARROLLO DE APLICACIONES WEB CON PHP Y MYSQL
2.2.4 Funcién que ejecuta una sentencia de consulta MySQL en PHP
A. Comentario
Una vez realizada la conexi6n y seleccionada una base de datos desde el servidor, puede recuperar
informacion desde las tablas de la base de datos activa; para ello, use la funcién mysql_query
que permite ejecutar una sentencia de consulta al servidor.
$n
Sintaxis
'sql_query(sentencia_nysql, variable_de_conexion);
La variable $rs almacena el valor booleano de la consulta, es decir, TRUE sila consulta es correcta
O FALSE si esta errada.
La funcién retornaré un conjunto de registros solo si la sentencia_mysql es SELECT, en caso
‘ocurra un error en dicha sentencia, esta devolverd FALSE como resultado,
+ La funcién retornaré TRUE solo si la sentencia_mysql es INSERT, UPDATE 0 DELETE, en caso
encuentre un error en dicha sentencia, esta devolverd FALSE como resultado.
* Se debe tener en cuenta que la funcién mysql_query envia la consulta al servidor MySQL, pero
‘no muestra los resultados en la pagina HTML.
Caso 1: Ejecutar la sentencia MySQL que permite mostrar todos los registros de la tabla Cliente.
Archivo: consulta1.php
Caso 3: Ejecutar la sentencia MySQL que permite mostrar todos los registros de la tabla Cliente,
ademas deberé mostrar el mensaje «Consulta implementada correctamente» sila sentencia de
consulta es correcta, en caso contrario, emitiré el mensaje «Error en la implementacién de la
consulta»,
Archivo: consulta3.php
‘neta charset
<2php
7* Conexion al servidor */
Scn=mysql_connect( "localhost" ‘root,
/* Seleccionando 1a base de datos Ventas2e15 */
nysql_select_do("ventas2@15' cn);
/* Consultando 1a tabla cliente */
Srsemysql_query(*SELECT * FROM CLIENTE' ,$cn);
/* Validando 1a sentencia de consulta */
if (Srs)
echo ‘Consulta implenentada correctanente’ ;
else
echo ‘Error en 1a implementacién de 1a consulta’ ;
»
2.2.5 Funcién que determine el total de registros devueltos por la funcién mysql_
query usando la sentencia SELECT de MySQL
A. Comentario
Seré de mucha importancia determinar el nimero de registros encontrados por la funcién
mysql_query, ya que desde aqui puede determinar exactamente cudntos registros vienen de la
consulta 0 cudntos registros fueron afectados por la misma.
B. Sintaxis
Svariable = mysql_num_rows(variable_de_consulta);
+ $variable: Es el ntimero total de registros resultantes de una consulta
+ variable_de_consulta: Es aquella variable que ejecuta la funcién mysql_query.Caso 1: Determinar el numero total de productos, tal como se muestra en la siguiente imagen:
| =|=
“php
7* Conexién al servidor */
$cn=nysql_connect( ‘localhost’ , ‘root, '");
/* Seleccionando 1a base de datos Ventas2015 */
imysql_select_db( “ventas2015" , $n);
/* Consultando 1a tabla cliente */
$rsemysql_query("SELECT * FROM PRODUCTO" ,$cn);
$n= mysql_num_rows($rs);
echo ‘El nimero total de productos registrados e:
»
Caso 2: Determinar el niimero total de boletas asociadas al cliente Carlos Lopez Hurtado, tal
‘como se muestra en la siguiente imagen:
IO 20 men nnsrsaro 2-86) EI)
Bbaanon
‘Archie Edin Yer Eaoitor Heramierar dyads
1 nimero total de bletas de cent Carlos Lopex Hurtado es: 4
Archivo: total2.php
‘
CAP. 2: Inrecracion MySQL con PHP ER
/* Conexion al servidor */
‘$en = mysql_connect(*localhost', ‘root, "");
/* Seleccionando 1a base de datos Ventasz015 */
‘mysql_select_db( 'ventas2015' ,$cn);
/* Consultando 1a tabla cliente */
$cliente="Carlos Lopez Hurtado" ;
$rs = mysql_query("SELECT B.*
FROM BOLETA B
INNER JOIN CLIENTE C
(ON B.1D_CLIENTE-C.1D_CLIENTE
WHERE CONCAT(C.NOMBRES, " 7,C.PATERNO, * *,C.MATERNO}
$cliente’
/* Determinar el total de registros segun 1a consulta */
$n = mysql_num_rows($rs) ;
echo "El numero total de boletas del cliente ‘.$cliente." es: '.$n;
»
2.2.6 Funcién que muestre los registros de una consulta mysql_query en PHP
A. Comentario
La ejecucién de una consulta al servidor conlleva el manejo de registros de tamafio variable,
es decir, podria devolver un juego de registros como también podria devolver un solo valor. En
‘ambos casos, se necesita una funcién que se introduzca dentro de estos registros y los pueda
devolver, de forma que puedan ser visibles por el usuario, ya sea en controles independientes del
HTML o en una tabla de registros.
B. Sintaxis
mysql_result (variable_consulta,
numero_registro,
rnombre_colunna) ;
+ variable_consulta: Es la referencia a la consulta ejecutada con la funcién mysql_query().
+ numero_registro: Es el nuimero de registro desde el cual se desea obtener su informacién, tenga
en cuenta que el primer registro se ubica en la posicién 0 y el Ultimo registro en la posicién n-1,
donde n es el ntimero total de registros obtenidos por la consulta
* nombre_columna: Se obtiene de los nombres de la columna de la tabla consultada, tenga en
cuenta que dichas columnas podrian ser tratadas como nimeros enteros iniciando en O para la
primera columna,Caso 1: Listar el primer cliente registrado, tal como se muestra en la siguiente imagen:
LISTADO DE CLIENTES
ae (05 (OPE RTAOO
paren Se no 6
Archivo: listado1.php
ctitler
‘cheader>
LTSTADO DE CLIENTES
Codigo
Nombre del Clientec/td>
<2php echo mysql_result($rs, @,"nonbres*).* *.
mysql_result($rs, @,'paterno’)." *.
mysql_result($rs, 0,‘materno"); ?2
Direceiéne/td>
<2php echo mysql_result($rs, @,‘direccion’); ?>
Teléfono
<2php echo mysql_result($rs, @,"fono'); ?>
Codigo de distritoc/td>
<2php echo mysql_result($rs, 0,'id distrito’); ?>
CAP 2 mcmccy MOL cov PHP
etry
ché>Todos los derechos reservados @2015
Observacién: Tenga en cuenta que el valor 0 hace referen
obtenidos a partir de la consulta.
a la primera fila de registros
implementar una aplicacién web que permita listar los clientes asi como también
ar el total de clientes, tal como se muestra en la siguiente imagen:
Archivo: listado2.php
se BBB) oesano.to oe aPuicaciones wes cow PHP Y mvs.
cheader>
ing src="banner_clientes.png” width="949" height="210"/>
«CoDIGo
CLIENTE
TELEFONO
DISTRITO
«CORREO ELECTRONICO
'650" cellspacing="0" cellpadding="0">
5 Signs $i44)( 2
<2php echo mysql_result($rs, $1, ‘noabres").
nysql_result($rs, $1, paterno").
mysql_result(Srs, $1, ‘materno');
»
<2php echo mysql_result($rs, $i,‘direccion’); ?>
<2php echo mysql_result($rs, $i, ‘email*
<2php } ?>
Todos los derechos reservados @2015
Po
*$n5 2
Observacién: Para que pueda mostrar todos los registros de clientes, primero debe determinar
el total de clientes obtenidos desde la consulta, esto lo realiza con la funcién mysql_num_rows,
luego lo estructura en la sentencia for para listar a todos los clientes, reemplazando el numero 0
del caso anterior por la variable $iArchivo: mi€stilo.css
body {
font-family: tanona;
font-size: 12px;
>
table {
width: 100%;
border: 1px solid #000;
?
tr (
background:
d
Caso 3: Implementar una aplicacién web que permita listar el cédigo, nombre completo de
los clientes, la descripcién del distrito y mostrar el total de clientes, tal como se muestra en la
siguiente imagen:
Archivo: listado3.php
<1DOCTYPE html>
LISTADO DE CLIENTES
see BB oesnenorto 0 articaciones wes con pue v mvsae
$cn = mysql_connect (‘1ocalhost', ‘root* "*
/* Seleccionando 1a base de datos Ventas2e15 */
inysql_select_db( ‘ventas2015" ,$en);
J* Consultando 1a tabla cliente */
$rs = mysql_query("SELECT C.1D_CLIENTE,
CCONCAT(C.NOMBRES," ",C.PATERNO," *,C.MATERNO),,
D.DESCRIPCION
FROM CLIENTE C INNER JOIN DISTRITO D
ON C.1D_DISTRITO=D.1D_ISTRITO",$cn);
/* Determinar el total de clientes */
$n = mysql_num_rows($rs);
»
CLIENTE¢/td>
DISTRITO
$ic$nj$iee)( 2>
<2php echo mysql _result($es, $1,2);?>
<2php } 2>
<2php echo "EL TOTAL DE CLIENTES ES: '.$n; ?>
Todos los derechos reservados @2615
Observacién: Se observa que la funcién mysql_result hace referencia a un valor numérico 0, 1,
2, respectivamente; esto se debe a la cantidad de columnas que emite la consulta; asi tenemos @
obtiene el cédigo, 1 al nombre completo y 2 a la descripcién del distrito de los
Archivo: mi€stilo.css
body (
font-family: tahona;
font-size: 12px;
}
table {
while (
background: activecaption;
font-size: 14px;CAP. 2: InreaRacion MySQL con PHP
2.2.7 Casos desarrollados
de:
TELE Listado de clientes por distrito
Implementar una aplicacién web con PHP y MySQL que permita listar los clientes segin el distrito
seleccionado por el usuario, tal como se muestra en la siguiente imagen:
{ LISTADO DE CLIENTES POR DISTRITO
| seeccone Dstito CERCA + USTAR
| CUENTES DeL oSsTRITO: PACHACANAC
covIGo CUENTE ‘TELEFONO DISTRITO
0009) ‘MANUEL SUAREZ FERNANDEZ 4576738 PACHACAMAC
coor ‘CARLOS COLAN BARDALES 3698574 PACHACAMAC
‘TOTAL a
| Todos drach reads 07015
Imagen: ListadoClientesxDistrito.php
Tener en cuenta lo siguiente:
* Implementar toda la aplicacion en una carpeta llamada ClientesxDistrito.
* Los nombres de los distritos deben encontrarse precargados en el control cuadro combinado;
se debe tener en cuenta que el cédigo del distrito representa su valor y, finalmente, considere
que solo se deben mostrar los distritos en los cuales haya por lo menos un cliente registrado,
* Alseleccionar un distrito desde el control cuadro combinado, se debe seleccionar LISTAR para
listar los clientes registrados.
* Al final se debe mostrar el total de clientes asociados a un determinado distrito.
El objetivo de cada archivo del proyecto es:
* conecta.php: Contiene las sentencias que permite conectarse al servidor MySQL y seleccionar
la base de datos Ventas2015.
+ listadoClientesxDistrito.php: Contiene el proyecto web que interacttia con el usuario.
* captura.php: Contiene la funcién getDistrito que permite capturar el cédigo del distrito
seleccionado por el usuario.
* mi€stilo.css: Contiene los estilos que se aplicaran en el archivo listadoClientesxDistrito.
oHArchivo: conecta.php
»
cheader>
LISTADO DE BOLETAS POR CLIENTE
Todos los derechos reservados @2015
Comentarios
<2php echo mysql_result($rs, $i,0) ?>
<2php echo mysql_result($rs, $i,1) ?>
<2php echo mysql_result($rs, $1,2) ?>
<2php echo mysql_result($rs, $i,3) ?>
<2php echo '$ ".nunber_format(mysql_result($rs, $1,4),2) ?>
Los resultados son enviados a la tabla mediante la funcién mysql_result. Esta funcién especifica
los registros obtenidos en la variable $rs, los registros a mostrar con la variable $i y las columnas
a mostrar, donde 0 representa al cédigo de la boleta, 1 a la fecha de la boleta, 2 al cédigo del
cliente, 3 al nombre completo del cliente y 4 al subtotal obtenido por boleta. Finalmente, se
usa la funcién .number_format para redondear el resultado de los subtotales a dos decimales.
Se imprime la variable $acumulado a dos decimales usando la funcién number_format,
considere que dicha variable posee el acumulado de los subtotales.
Archivo: captura.php
Dacia)
eo Nee v0l
scare)
eres
Imagen: carpeta fotos el cual contiene todas las imagenes de ls clientes en formato JPG.
El objetivo de cada archivo del proyecto es:
* conecta.php: Contiene las sentencias que permite conectarse al servidor MySQL y seleccionar
la base de datos Ventas2015.
* listado.php: Contiene el proyecto web que interactiia con el usuario.
* miEstilo.css: Contiene los estilos que se aplicardn en el archivo listado.
Archivo: conecta.php
»
LISTADO DE CLIENTES
banner_clientes.png” width="700" height="200">CAP. 2: Inrecracion MySQL con PHP IO)
th width="80" coorco
180" >CLIENTE
160" >TELEFONO
«th width="100" sIMAGEN«/th>
<2php echo mysql_result ($rs,$4,0)52>
<2php echo mysql_result ($rs,$i,1)3?>
<2php echo mysql_result ($rs,$i,2);?>
";
»
Todos los derechos reservados @215
Comentarios
<2php echo mysql_result ($rs,$i,0)5?>
";?>
La variable $rs contiene todos los registros resultantes que se quiere mostrar, se realizard dicha
impresién usando la funcién mysql_result, considere que $i accede a cada fila de los registros
y el ntimero 0 pertenece al cédigo, 1a los nombres completos y 2 al teléfono de los clientes.
Finalmente, la impresién de la imagen se realiza mediante la etiqueta y especificando en
la propiedad SCR el lugar y el nombre exacto de la imagen; aqui, debe recordar que el nombre
de la imagen es la misma que el cédigo del cliente, en la propiedad width se define el ancho de
la imagen, el cual podria ser modificado a conveniencia propia.
Archivo: mi€stilo.css
body{
font-family: tahona;
font-size: 14px;
y
ahs
text-align: centers
}
table {
margin: autos
background-color: antiqueshite;
+
ime
margin: auto;
display: blocks
y
table th (
background-color: #b9c9fe;
yCAP. 2: Inrecracion MySQL con PHP IS
Listado de clientes paginado con imagenes
Implementar una aplicacién web con PHP y MySQL que permita listar los clientes de forma
paginada, tal como se muestra en la siguiente imagen:
LISTADO DE CLIENTES
0001 CARLOS LOPEZ HURTADO 4677352
(c0002.—_FRIDA QUIROZ DUARTE 6734732
(C0003. ALEJANDRO TRAUCO MANRIQUE 4676732
(C0004 CARLA BLANCO RUZ 4967438
,
2
Q
8
a
Pagina N° 1 de 4
(uta)
‘Todos os derechos reservados 02015
Imagen: paginacion.php mostrande los registros de la pégina 1
Tener en cuenta lo siguiente:
* Implementar toda la aplicacién en una carpeta llamada ImagenesClientes.
* Cada pagina solo debe mostrar cuatro clientes y tener un enlace para dirigirse a los demas
registros.
* Lallista debe mostrar el c6digo, nombre completo del cliente, teléfono y la foto del cliente.
* Debe contar con una carpeta llamada FOTOS que contenga las imagenes de los clientes, tal
como se muestra a continuacién:Way DESARROLLO DE APLICACIONES WEB CON PHP Y MYSQL
ITE cre» preci» er
ro 2 Q
>Date a
tas 2ea
agaa
Imagen: carpeta fotos el cual contiene todas las imagenes de ls clientes en formato JPG,
* Alpresionar en un ntimero de pagina, se deben mostrar los registros correspondientes, ademas
de mover el link al numero siguiente de pagina; es de
se encuentra visualizando la pagina 2,
esta no tendré enlace, tal como se muestra en las siguientes imagenes:
LISTADO DE CLIENTES
(CORINA MENDOZA PEREZ
Imagen: paginacion.php mostrande los registros de la pégina 2CAP, 2: Inreanacion MySQL con PHP
cy
LISTADO DE CLIENTES
po er @
‘Imagen: paginacion php mostrando los registos de la pagino 3
LISTADO DE CLIENTES
_
Y,
THAGEN
cons Jose WZARTE LAN 120965
(Coo VIDAL ZORRILA RODRIGUEZ saree
cons UMLERWO RAMOS FLORES 4597964
Pigina n° dea
‘dono decor resend 02015
‘Imagen: paginacion php mostrando los reistros de a pégina 4DESARROLLO DE APLICACIONES WEB CON PHP Y MYSQL
El objetivo de cada archivo del proyecto es:
* conecta.php: Contiene las sentencias que permite conectarse al servidor MySQL y seleccionar
la base de datos Ventas2015.
* paginacién.php: Contiene el proyecto web que interactia con el usuario.
» miEstilo.css: Contiene los estilos que se aplicarn en el archivo listadoClientesxDistrito.
Archivo: conecta.php
php
$cn = mysql_connect (‘localhost ‘root ",'');
ysql_select_do( Ventas2015", $n);
»
Archivo: paginacién.php
‘LISTADO DE CLIENTES
th width="280"CLIENTE
TELEFONO
IMAGEN¢/th>
<2php echo mysql_result ($rs, $1,0)32>
";
@) $totalPage+;
//Imprimiendo el niimero actual y el total de paginas
echo “Pagina N? ".($nPage1)." de ".$totalPag;
»
'>
sss esanouto ve apuicaciones wee cow Px y mvs
Todos los derechos reservados @2015
Archivo: miEstilo.css
bodyt
font-family: tahona;
font-size: 14px;
}
na,hs(
text-align: center;
+
Hcentrado{
‘text-align: center;
y
table {
margin: autos
background-color: antiquewhite;
table th (
background-color: sb9cofe;
y
2.2.8 Manejo de registros usando arreglos de indice
A. Comentario
Para obtener los registros a partir de una consulta implementada con la funcién mysql_query,
se usé la funcién mysql_result, que permitia devolver los registros a una variable que a su vez
era descargada en una tabla. Ahora se verd cémo transferir dicha informacién a un arreglo de
tipo indice usando la funcién mysql_fetch_row.
B. Sintaxis
Snombre_arreglo_indice = aysql_fetch_row($variable_de_consulta)
La sentencia debe ser parte de la estructura repetitiva for o while solo si hay varios registro
que obtener desde la consulta
+ Snombre_arreglo_indice: Es la variable que contendré todos los registros de la consulta.
+ $variable_de_consulta: Es la especificacién a la consulta realizada con la funcién mysql_query.CAP, 2: Inrecracion MySQL con PHP
Caso 1: Implementar una aplicacién en PHP que permita listar los clientes de la base de datos
Ventas2015 usando arreglos por indice, tal como se muestra en la siguiente imagen:
Fora ocx
Imogen: istodo3 php
‘Archivo: listado3.php
ctitler
LISTADO DE CLIENTES
td ide"8la" >CLIENTE¢/td>
«stro
<2php echo $clientes[2];?>
‘
"$n3 ?>
Archivo: mi€stilo.css
body {
font-family: tahona;
font-size: 12px;
}
table {
width: 100%;
border: 1px solid #000;
}
hla {
background: activecaption;
font-size: 14px;
,
2.2.9 Manejo de registros usando arreglo asociativo
A. Comentario
De la misma forma con que se manejaron los registros usando arreglos de indice, se pueden
transferir registros a un arreglo asociativo.
intaxis
Snonbre_arreglo_asociativo = mysql_fetch_array(Svariable_de_consulta)
La sentencia debe ser parte de la estructura repetitiva for o while solo si hay varios registros que
obtener desde la consulta* $nombre_arreglo_asociativo: Es la variable que contendré todos los registros de la consulta.
* $variable_de_consulta: Es la especificacién a la consulta realizada con la funcién mysql_query.
Caso 1: Implementar una aplicacién en PHP que permita listar los clientes de la base de datos
Ventas2015 usando arreglos asociativos, tal como se muestra en la siguiente imagen:
i-¢
LUSTADO DE CLIENTES
Imagen: Istados php
Archivo: listado4. php
ctitler
LISTADO DE CLIENTES
‘
coDTGo
CLTENTE
<2php echo $clientes["1D_CLIENTE"];?>
<2php echo $clientes["CLIENTE"];?>
<2php echo $clientes["DESCRIPCION"];?>
Todos los derechos reservados @2015
Tener en cuenta lo siguiente:
+ Todas las columnas de la consulta deben tener un nombre.
* La especificacién de un elemento asociado diferencia entre mayiisculas y
Archivo: miEstilo.css
body {
font-family: tahona;
font-size: 12px;
100%;
border: 1px solid #200;
»
wile {
background: activecaption;
font-size: 14px;CaP 2 semen sot cove RE
2.2.10 Manejo de registros usando arreglos asociativos y foreach
A
Comentario
El uso del arreglo asociativo conlleva a que los registros consultados se almacenen en un
arreglo comin, desde el cual podemos obtener la informacién e imprimirlas, esta vez se usard
la estructura repetitiva foreach para la impresién de los resultados. Se debe tener en cuenta que
para dicha impresién primero debe estar lleno el arreglo.
intaxis
while ($variable_arreglo_asociativo = mysql_fetch_array($variable_de_consulta)){
$arreglo[ J $variable_arreglo_asociativo;
}
foreach (Sarreglo as $variable_arreglo_asociativo){
‘echo $variable_arreglo_asociativo{nonbre_colunna];
La sentencia while se encarga de llenar el arreglo con los registros obtenidos en la consulta
ejecutada por la funcién mysql_query. Mientras que foreach recorre por todo el arreglo para su
impresi6n; no teniendo relacién con la consulta solo con el arreglo.
$variable_arreglo_asociativo: Es la variable que contendra todos los registros de la consulta.
$variable_de_consulta: Es la especificacién de la consulta realizada con la funcién mysql_query.
Sarreglo[ J: Registra el resultado de la consulta.
nombre_columna: Es la especificacién de las columnas a mostrar en el listado.
Caso 1: Implementar una aplicacién en PHP que permita listar los clientes de la base de datos
\Ventas2015 usando arreglo asociativo y la estructura foreach, tal como se muestra en la
uiente
imagen:
LISTADO DE CLIENTES
Imagen: istado5.phpwR) oesannotto oe aPuicaciones wes cow PHP y Myst
Archivo: listado5.php
<1DOCTYPE html>
chtml>
‘
td dde"fla">coorGo
"fila" CLIENTE
"fila" DISTRITO
width="650" cellspacing=
<2php echo $cliente[1];2>
<2php echo "EL TOTAL DE CLIENTES ES: *.$n3 ?>
CAP, 2: Inrearacio MySQL con PHP RRR
Archivo: miEstilo.css
body {
font-family: tahona;
font-size: 12px;
activecaption;
+ 1px
2.2.11 Manejo de registros usando procedimientos almacenados
A. Comentario
Conforme se avanza en la integracién de PHP y MySQL, se van implementando consultas muy
‘extensas que llevan a cometer ciertos errores de precisién como una coma, una comilla simple
© doble; para evitarlos se usaré de aqui en adelante los procedimientos almacenados de MySQL.
B. Sintaxis
Primero: Crear el procedimiento almacenado en MySQL.
DROP PROCEDURE IF EXISTS nonbre_procedimiento;
CREATE PROCEDURE nonbre_procediniento(pardnetros)
Sentencia MySQL;
‘Se debe tener en cuenta que el punto y coma determina el fin de la implementacién del
procedimiento almacenado.
‘Segundo: Llamar a un procedimiento almacenado desde MySQL.
CALL nonbre_procedimiento(pardmetros) ;
Tercero: Integrar un procedimiento almacenado en una consulta desde PHP.
$variable_consulta-nysql_query(‘nonbre_procediniento’ ,$variable_de_conexion);Caso 1: Implementar una aplicacién en PHP que permita listar los clientes de la base de datos
Venta2015 usando procedimiento almacenado, tal como se muestra en la siguiente imagen:
Imagen: listade6.php
En MySQL implemente el siguiente procedimiento almacenado:
DROP PROCEDURE IF EXISTS sp_listadoclientes;
CREATE PROCEDURE sp_listadoclientes()
SELECT C.1D_CLIENTE,
CONCAT(C.NOMBRES,* ',C.PATERNO,” *,C.MATERNO) AS
cLTENTE,
D.DESCRIPCION
FROM CLIENTE C
INNER JOIN DISTRITO D
ON C.1D_DISTRITO=0..1D_DISTRITO;
ctitler
>CODIGO
CLIENTE
php
while($clientes = mysql_fetch_array($rs)){
»
<2php echo $clientes [1] ;?>
<2php echo $clientes[2];?>
>
etre
«ites
Todos los derechos reservados @2015
Archivo: mi€stilo.css
body {
font-family: tahona;
font-size: 12px3
y
table {
width: 100%
border: 1px solid #000;
}
wala {
background: activecaption;
font-size: 14px;
iPi DESARROLLO DE APLICACIONES WEB CON PHP Y MYSQL
ET EEnOLLE Consulta de productos por cédigo
Implementar una aplicaci6n web con PHP y MySQl. que permita listarlos datos de un determinado
producto segiin el cédigo de! mismo, tal como se muestra en la siguiente imagen:
CONSULTA DE PRODUCTOS
crese COOIGO DE PRODUCTO
PRECIO 200
‘stock $00
FECHA DE VENCIMIENTO 2015-05-05
Todos os derechos reservados 67015
Imogen: ftro.php
Tener en cuenta lo siguiente:
* Implementar toda la aplicacién en una carpeta llamada ProductoxCodigo.
* El cédigo del producto a buscar debe ingresarse en una caja de texto.
* La biisqueda debe mostrar la descripcién, precio, stock, fecha de vencimiento y la imagen del
producto.
* Debe contar con una carpeta llamada FOTOS que contenga las imagenes de los productos, tal
como se muestra a continuacién:
(Oe aero ogres enema rECAP. 2: Inrecracion MySQL cow PHP PAR
El objetivo de cada archivo del proyecto es:
= conecta.php: Contiene las sentencias que permiten conectarse al servidor MySQL y seleccionar
la base de datos Ventas2015.
‘ontiene el método getCodigo que permite capturar el cédigo del producto a
+ filtro.php: Contiene el proyecto web que interactiia con el usuario.
= miEstilo.css: Contiene los estilos que se aplicarén en el archivo filtro.
Procedimiento almacenado
DROP PROCEDURE IF EXISTS sp_productoxcodigo;
CREATE PROCEDURE sp_productoxcodigo(cod char(S))
SELECT *
FROM PRODUCTO
WHERE ID_PRODUCTO=cod;
Archivo: conecta.php
chtml>
CONSULTA DE PRODUCTOS