Subido por Erick Matute

0119-php-y-mysql

Anuncio
PHP y MySQL
Aplica cion e s W e b/ Sist e m a s W e b
Ju a n Pa vón M e st r a s
D e p. I n ge n ie r ía de l Soft w a r e e I n t e lige n cia Ar t ificia l
Fa cu lt a d de I n for m á t ica
Un ive r sida d Com plu t e n se M a dr id
Mat erial baj o licencia Creat ive Com m ons
PHP
Breve int roducción a MySQL con phpMyAdm in
Persist encia de dat os

La inform ación se guarda para volver a ut ilizarla

Mecanism os


Ficheros
• Alm acenam ient o básico
• Acceso secuencial o aleat orio
Bases de dat os
• I nform ación est ruct urada
• Relaciones
• Búsquedas
• Acceso concurrent e
• Cont rol de acceso a la inform ación
• I nt egridad
Juan Pavón - UCM 2012- 13
PHP
3
MySQL

Sist em a de Gest ión de Base de Dat os Relacional

La inform ación se guarda en t ablas
• Una t abla es una colección de dat os relacionados
• Una t abla const a de colum nas ( cam pos) y filas ( regist ros)
• Las t ablas se enlazan por relaciones ent re colum nas

I m plem ent a casi t odo el est ándar SQL ( St ruct ured Query
Language)

Código abiert o


Act ualm ent e de Oracle, que adquirió Sun, que t enía MySQL AB
Escalable

Aplicaciones pequeñas y grandes ( m illones de regist ros)

Transacciones, Mult iusuario

Eficient e: Mult ihilo, varias t écnicas de hash, b- t ree, et c.

Conexión al servidor MySQL con socket s TCP/ I P

Est o perm it e conect arla con casi cualquier plat aform a
Juan Pavón - UCM 2012- 13
PHP
4
phpMyAdm in

Herram ient a que ofrece una int erfaz gráfica para la
adm inist ración del servidor MySQL







Configuración del servidor y las bases de dat os
Gest ionar ( crear, m odificar, borrar) las bases de dat os, t ablas,
cam pos, relaciones, índices, et c.
Consult as con SQL, y m ediant e ej em plos ( query by exam ple)
Definir usuarios y asignar perm isos
Realizar copias de seguridad
Crear gráficos ( PDF) del esquem a de la base de dat os
Export ar a m uchos form at os ( docum ent os de t ext o, hoj as de cálculo)

En XAMPP se puede invocar en http://localhost/phpmyadmin/

Configuración



Fichero con fig.in c.ph p ( en el direct orio raíz de phpMyAdm in)
Pero m ás recom endable a t ravés de la int erfaz web de phpMyAdm in en
http://www.dominio.com/phpMyAdmin/setup
Usar el password del root de m ySQL, que se aplica t am bién a ese
m ism o usuario en phpMyAdm in ( efect ivo t ras rearrancar m ySQL)
Juan Pavón - UCM 2012- 13
PHP
5
phpMyAdm in – Página inicial
Juan Pavón - UCM 2012- 13
PHP
6
Usuarios de MySQL

Conviene crear un nuevo usuario para cada sit io web



Cada sit io web t endrá sus propias bases de dat os
El usuario root solo se debe usar para adm inist ración
Ent rar en phpMyAdm in com o usuario root


En principio no t iene password, pero habrá que ponerlo, por seguridad
A cont inuación crear un nuevo usuario
• por ej em plo para el sit io del ej em plo a cont inuación: tienda
• Pest aña Users- > Add user
• En la vent ana que aparece indicar
•
•
•
•
Nom bre de usuario: tienda
Host ( local si est áis desarrollando con XAMPP en vuest ro PC)
Password: tienda
Crear una base de dat os para el nuevo usuario
• Marcar la casilla Create database with same name and grant all privileges
• No act ivar privilegios globales


Salir de la sesión com o root
Ent rar con el nuevo usuario

Se puede t rabaj ar con la nueva base de dat os
Juan Pavón - UCM 2012- 13
PHP
7
Creación de una base de dat os con phpMyAdm in

Com o root : Creat e dat abase en la pest aña Dat abase


I ndicar un nom bre para la base de dat os
La opción " collat ion" indica el conj unt o de reglas de com paración y
ordenación del t ext o en la base de dat os, que dependerá del idiom a
• Por ej em plo, ut f8_general_ci que vale para m uchos idiom as y no es
sensible a m ayúsculas y m inúsculas
Juan Pavón - UCM 2012- 13
PHP
8
Manej o de la base de dat os con phpMyAdm in

Al seleccionar la base de dat os creada aparecen las operaciones
que se pueden realizar con ella

Se pueden añadir perm isos ( pest aña Privileges) para que ot ros usuarios
puedan usar la base de dat os

En St ruct ure se pueden crear las t ablas que definen el esquem a
de la base de dat os
Juan Pavón - UCM 2012- 13
9
PHP
Ej em plo sencillo de base de dat os: Tienda
Clie n t e s
Pe didos
nif *
num ero *
nom bre
fecha
direccion
client e
Pr odu ct os
id *
nom bre
precio
em ail
product o
t elefono
cant idad
descripcion
* Cla ve pr im a r ia ( los obj et os en est a colum na son únicos y no nulos) . Será indexada.
* * Se pueden definir t am bién ín dice s para m ej orar la eficiencia de las búsquedas
* * * Las cla ve s for á n e a s ( for e ign k e ys) ident ifica una colum na ( o grupo de
colum nas) en una t abla que se refiere a ot ra colum na ( o grupo de colum nas) en ot ra
t abla, generalm ent e la clave prim aria en la t abla referenciada.
Cont ribuyen a gest ionar la int egridad de la base de dat os: no se puede crear un
pedido de un client e o un product o que no exist an.
Las claves foráneas deberían indexarse porque se usarán para seleccionar regist ros
con frecuencia.
Juan Pavón - UCM 2012- 13
PHP
10
Creación de t ablas

La base de dat os const a de t ablas




Cada una con una serie de colum nas ( cam pos)
Cada cam po t endrá asociado un t ipo:
• Ent eros: TI NYI NT, SMALLI NT, MEDI UMI NT, I NT, BI GI NT
• Núm eros reales: DECI MAL, DOUBLE, FLOAT, REAL
• Booleanos: BOOLEAN
• Fecha: DATE, TI ME, YEAR
• St rings: VARCHAR ( hast a 256 caract eres) , TEXT
Com o St orage Engine conviene usar InnoDB para poder gest ionar
relaciones ent re t ablas
Com o Collat ion conviene usar utf8_general_ci
Juan Pavón - UCM 2012- 13
PHP
11
Creación de t ablas

La prim era t abla es la de client es, con cinco cam pos





nif: servirá com o prim ary key ( el nif es único)
nom bre: de em presa o de persona ( sería nom bre + apellidos)
• Se puede indexar para hacer búsquedas por est e cam po
direccion
em ail
t elefono: com o st ring para perm it ir uso de caract eres no num éricos
Juan Pavón - UCM 2012- 13
PHP
12
Creación de t ablas

Crear dos t ablas m ás:


product os
pedidos
Juan Pavón - UCM 2012- 13
aut oindex
PHP
13
Definir relaciones ent re t ablas

Usar la pest aña Designer para ver gráficam ent e las t ablas


Se pueden recolocar las t ablas
Para añadir una relación seleccionar el bot ón Creat e relat ion
• Seleccionar la prim ary key de la t abla client es: nif
• Seleccionar la foreign key en la t abla pedidos: client e
• Aparece una vent ana para seleccionar qué hacer para preservar la
int egridad de las referencias, con las siguient es operaciones:
• DELETE: seleccionar RESTRI CT
• UPDATE: seleccionar CASCADE
• La rest ricción m ás adecuada en la m ayoría de los casos es evit ar realizar
borrados en cascada y act ualizar en cascada

• La relación queda est ablecida y aparece en el gráfico
Para salvar el diagram a, usar el bot ón Save
Juan Pavón - UCM 2012- 13
PHP
14
Definir relaciones ent re t ablas

Si falla el est ablecim ient o de una relación, com probar que:






Am bas usan t ablas I nnoDB com o st orage engine
No hay regist ros en las t ablas
• Si los hubiera hay que com probar que concuerdan para m ant ener la
int egridad de las referencias
El cam po en la prim era t abla es una clave prim aria
El cam po correspondient e en la segunda t abla est á indexado
Am bos cam pos t ienen exact am ent e los m ism os t ipos de dat os
• Si son num éricos, am bos deben ser unsigned ( o ninguno)
Una vez que se haya est ablecido la relación no será posible
int roducir regist ros en la segunda t abla a m enos que se
correspondan en el cam po de la relación con el de la prim era
t abla

¿Qué ocurre en la segunda t abla cuando se borra un regist ro de la
prim era t abla?
Juan Pavón - UCM 2012- 13
PHP
15
I nt roducir dat os en t ablas

Seleccionar la t abla


Seleccionar la pest aña I nsert
I nt roducir dat os para los cam pos correspondient es en Value

Tam bién se pueden int roducir a t ravés del program a PHP que
recupera la inform ación que un usuario haya int roducido en un
form ulario de una página web

En la pest aña Browse se pueden ver los regist ros de la base de
dat os y m odificar cam pos de los m ism os
Juan Pavón - UCM 2012- 13
PHP
16
Backup de la base de dat os

Ex por t


Convenient e de form a regular
• Especialm ent e si se hacen m uchos cam bios
Opciones ( seleccionar Cust om en Export Met hod)
• Qué se guarda
• El servidor com plet o
• Una base de dat os ent era
• Una t abla
• Est ruct ura o dat os, o am bos
• Com presión: ninguna, zipped, gzipped, bzipped
• Form at o
• SQL, CSV, Word, Lat ex, Excel, OpenDoc, PDF, XML, JSON, et c.

El proceso inverso es posible con I m por t
Juan Pavón - UCM 2012- 13
PHP
17
Ej ercicios con phpMyAdm in

I nst alar phpMyAdm in

Crear la base de dat os t ienda con las t ablas client es, product os y
pedidos t al com o se han definido previam ent e

I nsert ar elem ent os en las t res t ablas, prim ero en client es y
product os y luego en pedidos
• Com prueba qué ocurre si se int ent a int roducir un pedido para un
client e que no exist e

I nt ent a elim inar un client e que t iene algún pedido
• Observa el efect o de haber definido la polít ica DELETE: RESTRI CT
cuando se est ableció la FOREI GN KEY

I nt ent a cam biar el nom bre de un product o que t iene algún pedido
• Observa el efect o de haber definido la polít ica UPDATE: CASCADE
cuando se est ableció la FOREI GN KEY
Juan Pavón - UCM 2012- 13
PHP
18
PHP
Uso de MySQL con PHP
Acceso a la base de dat os en PHP
web Servidor Web dinámico
Servidor Web
Cliente
«request»
Navegador
httpd
GET index.php
Intérprete PHP
(Genera HTML)
código
HTML
Busca página index.php
Consulta
index.php
Repositorio
de páginas
Juan Pavón - UCM 2012- 13
PHP
Base de
datos
20
Uso de una base de dat os MySQL desde PHP

Con PHP5 se recom ienda ut ilizar la ext ensión M ySQLi ( Mysql
im proved) en vez de la t radicional M ysql



Perm it e ut ilizar las m ej oras de las últ im as versiones del servidor
MySQL
I nt erfaz orient ada a obj et os
Alt ernat iva: PHP Dat a Obj ect s ( PD O)


I nt erfaz ligera para acceso a bases de dat os, con soport e para MySQL
y ot ros sist em as de gest ión de bases de dat os
• Un driver específico para cada SGBD
Proporciona una capa de abst racción para el acceso a dat os
• I ndependient e del t ipo de SGBD
• No usa la sint axis SQL
• Orient ado a obj et os
Juan Pavón - UCM 2012- 13
PHP
21
Uso de una base de dat os MySQL desde PHP

Norm alm ent e com prende los siguient es pasos:
1 . Con e x ión con el servidor de bases de dat os y selección de una base de
dat os
• Se obt iene un obj et o para operar con la base de dat os
2 . Uso de la ba se de da t os
• Envío de operación SQL a la base de dat os
• Recepción y t rat am ient o de los result ados
• Liberar m em oria de result ados
3 . D e scon e x ión
Juan Pavón - UCM 2012- 13
PHP
22
Conexión con la base de dat os

Para ut ilizar una base de dat os hay que indicar el servidor y la
base de dat os que se quiere ut ilizar, con un usuario
$mysqli = new mysqli($hostname, $usuario, $password,$basededatos);
if ( mysqli_connect_errno() ) {
echo "Error de conexión a la BD: ".mysqli_connect_error();
exit();
}
• Devuelve un obj et o sobre el que operar con la base de dat os
• Si hubiera un error se com prueba con el m ét odo
mysqli_connect_errno()

Cuando se dej a de ut ilizar la base de dat os conviene cerrar la
conexión al servidor para liberar recursos ordenadam ent e
$mysqli‐>close();
Juan Pavón - UCM 2012- 13
PHP
23
Operaciones SQL en una base de dat os MySQL

Las qu e r ie s SQL se pasan con el m ét odo qu e r y
$mysqli‐>query("SQL query");
• Devuelve un obj et o que perm it e t rat ar los result ados
• Devuelve FALSE si hay algún error
• Si se ponen variables PHP en la query, se ponen ent re com illas
sim ples para que la función m ysql_query las reem place por su valor
$empresa="Empresa%";
$query="SELECT * FROM clientes WHERE nombre LIKE '$empresa'";
$resultado=$mysqli‐>query($query)
or die ($mysqli‐>error. " en la línea ".(__LINE__‐1));
$numregistros=$resultado‐>num_rows;
echo "<p>El número de clientes con nombre Empresa* es: ",$numregistros,".</p>";
Juan Pavón - UCM 2012- 13
PHP
24
Operaciones SQL en una base de dat os MySQL

Varios at ribut os y m ét odos de la clase m ysqli_ r e su lt facilit an el
t rat am ient o de los regist ros obt enidos

$ n u m _ r ow s: Núm ero de regist ros ( filas)
$numfilas=$resultado‐>num_rows;

fe t ch _ a r r a y( ) o fe t ch _ a ll( ) : Devuelve t odas las filas en un array
asociat ivo, num érico, o en am bos
• fe t ch _ a ssoc( ) : Lo m ism o pero com o array asociat ivo
$registro=mysqli‐>fetch_array([modo])
• Argum ent o opcional para indicar cóm o se accede a los regist ros
• Usando el nom bre del cam po com o índice: MYSQL_ASSOC
• Usando la posición com o índice: MYSQL_NUM
• Usando t ant o el nom bre de cam po com o la posisicón: MYSQL_BOTH

fr e e ( ) : Libera la m em oria asociada al result ado
$resultado‐>free();
Juan Pavón - UCM 2012- 13
PHP
25
Operaciones SQL en una base de dat os MySQL

Ej em plo: list ado de la t abla client es
$query="SELECT * FROM clientes";
$resultado=$mysqli‐>query($query)
or die ($mysqli‐>error. " en la línea ".(__LINE__‐1));
$numregistros=$resultado‐>num_rows;
echo "<p>El número de clientes con nombre Empresa* es: ",$numregistros,".</p>";
echo "<table border=2><tr><th>NIF</th> <th>Nombre</th> <th>Dirección</th>
<th>Email</th> <th>Teléfono</th></tr>";
while ($registro = $resultado‐>fetch_assoc()) {
echo "<tr>";
foreach ($registro as $campo)
echo "<td>",$campo, "</td>";
echo "</tr>";
}
echo "</table>";
$resultado‐>free();
Juan Pavón - UCM 2012- 13
PHP
26
SQL

SELECT
Recupera elem ent os de una t abla o conj unt o de t ablas ( con JOI N)

SELECT campos FROM tabla WHERE campo = valor
• Si se quieren t odos los cam pos, usar *
• Si se om it e la cláusula WHERE se t ienen t odos los cam pos de la t abla
• Para la condición WHERE se pueden usar varios operadores:
• = < > != < < =
• AND OR NOT
>
>=
Se pueden recuperar cam pos de varias t ablas

SELECT tabla1.campo1 tabla2.campo2 FROM tabla1, tabla2
WHERE campo3=valor3 AND tabla1.campo1 = tabla2.campo2

Tam bién se pueden usar pat rones para las condiciones
• % indica cualquier subcadena
SELECT campos FROM tablas WHERE campo3 LIKE patron


• Ej em plo: SELECT nombre FROM clientes WHERE nombre LIKE Juan%
Ordenar: ORDER BY
Para no t ener regist ros duplicados: DI STI NCT
SELECT DISTINCT campos FROM tablas WHERE ...
Juan Pavón - UCM 2012- 13
PHP
27
SQL

I N SERT


UPD ATE


I nsert a nuevos elem ent os en una t abla
• Crea un nuevo client e
INSERT INTO clientes (nif, nombre, direccion, email, telefono)
VALUES ("M3885337J", "Empresa Uno", "Calle Uno, Madrid",
"[email protected]", "91 2347898")
Act ualiza cam pos de una t abla
• Modifica el im port e del product o "Producto1"
UPDATE productos SET precio = 399.99 WHERE nombre="Producto1"
D ELETE

Elim ina regist ros de una t abla
• Elim ina pedidos con m ás de 30 días de ant igüedad
DELETE FROM pedidos WHERE fecha < CURDATE()‐10
Juan Pavón - UCM 2012- 13
PHP
28
Ej ercicio

List ar la inform ación de la t abla pedidos indicando el nom bre y
NI F del client e, y el cost e de cada pedido ( cant idad* precio del
product o)

Definir una función que list e t odos los pedidos de un client e dado
por su nom bre
Juan Pavón - UCM 2012- 13
PHP
29
Bibliografía

Manual PHP oficial
ht t p: / / www.php.net / m anual/ es/ index.php

Sit io oficial de phpMyAdm in: ht t p: / / www.phpm yadm in.net

I nt roducción sencilla al uso de phpMyAdm in y php con MySQL



ht t p: / / www.yourwebskills.com / dbbackground.php
ht t p: / / www.yourwebskills.com / beginningm ysql.php
Libros



S. Suehring, T. Converse, J. Park. PHP6 and MySQL Bible. Wiley Pub.
2009
O. Heurt el. PHP y MySQL. Dom ine el desarrollo de un sit io Web
dinám ico e int eract ivo. Ediciones ENI 2009
M. Delisle. Dom inar phpMyAdm in para una adm inist ración efect iva de
MySQL. Packt Publishing ( 2007)
Juan Pavón - UCM 2012- 13
PHP
30
Apéndice: I n t e r fa z PH P M ysql t r a dicion a l

Norm alm ent e com prende los siguient es pasos:
1. Conexión con el servidor de bases de dat os
mysql_connect()
2. Selección de una base de dat os
mysql_select_db()
3. Uso de la base de dat os
• Envío de operación SQL a la base de dat os
mysql_query()
• Recepción y t rat am ient o de los result ados
mysql_num_rows()
mysql_fetch_array()
mysql_free_result()
4. Desconexión del servidor de bases de dat os
mysql_close()
Juan Pavón - UCM 2012- 13
PHP
31
Conexión con la base de dat os

Para ut ilizar una base de dat os hay que:

Con e ct a r se con e l se r vidor que la gest iona
$conexion = mysql_connect($servidor, $usuario, $password)
• Devuelve com o result ado un recurso de t ipo enlace ( la conexión a la
base de dat os)
• Si hubiera un error devuelve FALSE
• En caso de error, si se quiere acabar el script se puede poner:
$conexion = mysql_connect($servidor, $usuario, $password) or
die("Error en conexión al servidor MySQL: ".mysql_error());

Se le ccion a r la ba se de da t os en el servidor
mysql_select_db($basedatos, $conexion)
• La base de dat os se especifica en la variable $basedatos
• Devuelve TRUE si t odo va bien, FALSE si hay algún error
mysql_select_db($bd, $conexion) or
die ("Error: No se puede usar la base de datos. ".mysql_error());
Juan Pavón - UCM 2012- 13
PHP
32
Operaciones SQL en una base de dat os MySQL

Las qu e r ie s SQL se pasan con la función
mysql_query("SQL query");
• Devuelve un ident ificador o TRUE ( dependiendo de la inst rucción) si
la inst rucción se ej ecut a correct am ent e
• Devuelve FALSE si hay algún error
• Si se ponen variables PHP en la query, se ponen ent re com illas
sim ples para que la función m ysql_query las reem place por su valor
$query="SELECT * FROM clientes";
$resultado=mysql_query($query) or die ("Error en la query: ".mysql_error());
$numregistros=mysql_num_rows($resultado);
echo "<p>El número de registros de clientes es: ",$numregistros,".</p>";
Juan Pavón - UCM 2012- 13
PHP
33
Operaciones SQL en una base de dat os MySQL

El conj unt o de regist ros result ado del query se guarda en una
variable

Varias funciones facilit an el t rat am ient o de los regist ros obt enidos

m ysql_ n u m _ r ow s: Devuelve el núm ero de regist ros ( filas)
$numfilas=mysql_num_rows($resultado)

m ysql_ fe t ch _ a r r a y: Devuelve el siguient e regist ro o FALSE si no hay
m ás
$registro=mysql_fetch_array($resultado, [modo_de_acceso])
• Argum ent o opcional para indicar cóm o se accede a los regist ros
• Usando el nom bre del cam po com o índice: MYSQL_ASSOC
• Usando la posición com o índice: MYSQL_NUM
• Usando t ant o el nom bre de cam po com o la posisicón: MYSQL_BOTH

m ysql_ fr e e _ r e su lt s: Libera la m em oria una vez procesado el
conj unt o de regist ros
$registro=mysql_fetch_array($resultado)
Juan Pavón - UCM 2012- 13
PHP
34
Operaciones SQL en una base de dat os MySQL

Ej em plo: list ado de la t abla client es
$query="SELECT * FROM clientes";
$resultado=mysql_query($query) or die ("Error en la query: ".mysql_error());
$numregistros=mysql_num_rows($resultado);
echo "<p>El número de registros de clientes es: ",$numregistros,".</p>";
echo "<table border=2><tr><th>NIF</th> <th>Nombre</th> <th>Dirección</th>
<th>Email</th> <th>Teléfono</th></tr>";
while ($registro = mysql_fetch_array ($resultado, MYSQL_ASSOC)) {
echo "<tr>";
foreach ($registro as $campo)
echo "<td>",$campo, "</td>";
echo "</tr>";
}
echo "</table>";
mysql_free_result($resultado);
Juan Pavón - UCM 2012- 13
PHP
35
Desconexión de la base de dat os

Cuando se dej a de ut ilizar la base de dat os conviene cerrar la
conexión al servidor para liberar recursos ordenadam ent e
mysql_close($conexion);
Juan Pavón - UCM 2012- 13
PHP
36
Descargar