Está en la página 1de 18

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 PHP 9

Ej em plo sencillo de base de dat os: Tienda

Clie n t e s Pe didos
Pr odu ct os
nif * num ero *
id *
nom bre fecha
nom bre
direccion client e
precio
em ail product o
descripcion
t elefono cant idad

* 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 aut oindex

Juan Pavón - UCM 2012- 13 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 GET index.php httpd

Intérprete PHP
código (Genera HTML)
HTML
Busca página index.php
Consulta

index.php

Repositorio Base de
de páginas datos

Juan Pavón - UCM 2012- 13 PHP 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
 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", 
"jefe@empresauno.com", "91 2347898")

 UPD ATE
 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

También podría gustarte