Vous êtes sur la page 1sur 19

(1)

(2)

Para ver una copia completa de la licencia, acudir a la direccin
http://creativecommons.org/licenses/by-nc-sa/2.5/es/legalcode.es
(3)
ndice

(4.1) control de sesiones en PHP _______________________________________ 5
(4.1.1) limitaciones del protocolo http ........................................................................................................... 5
(4.1.2) sesiones ..................................................................................................................................................... 5
(4.1.3) tcnicas para almacenar el estado de una sesin........................................................................ 6
(4.1.4) uso de cookies ........................................................................................................................................ 6
(4.1.5) uso de sesiones en PHP ....................................................................................................................... 9
(4.2) bases de datos __________________________________________________ 12
(4.2.1) ventajas de las bases de datos ......................................................................................................... 12
(4.2.2) instalacin y configuracin de MySQL .......................................................................................... 13
(4.2.3) conexin a MySQL desde PHP........................................................................................................ 13
(4.2.4) cerrar la conexin con la base de datos ....................................................................................... 14
(4.2.5) captura de errores .............................................................................................................................. 14
(4.2.6) seleccionar base de datos ................................................................................................................. 16
(4.2.7) tipos de datos MySQL ........................................................................................................................ 16
(4.2.8) ejecucin de instrucciones SQL ........................................................................................................ 17


(5)
(4)
PHP (III)
sesiones.
acceso a bases de
datos
(4.1) control de sesiones en PHP
(4.1.1) limitaciones del protocolo http
El protocolo que se utiliza para navegar por la web es http. Se dice que http es un
protocolo sin estado (o sin memoria). La razn es que no almacena informacin alguna
sobre la peticin o la respuesta, lo que provoca que cada peticin sea independiente de
la anterior, no se tiene en cuenta lo realizado en la peticin anterior.
Al principio, los desarrollos web no estaban preocupados por esta circunstancia ya
que, esencialmente, servan pginas estticas que contena informacin simple. Sin
embargo en la actualidad necesitamos otorgar memoria a nuestros desarrollos para
adaptar nuestras pginas web al usuario concreto o a las acciones que este realiza. Eso
permite una experiencia ms rica al usuario o usuaria.
(4.1.2) sesiones
Una sesin es la navegacin que hace un determinado usuario o usuario por un sitio
web. La sesin se refiere a todas las peticiones que realiza el usuario referidas al mismo
sitio web. Una sesin se inicia cuando el usuario acude a una pgina del sitio web y
finaliza cuando el usuario abandona el sitio.
Durante toda la sesin el usuario puede haber establecido preferencias y elegido
opciones que nos interese recordar. Eso es lo que se denomina el estado de una sesin.
Deberemos conseguir que esa informacin no se pierda para utilizarla tanto en beneficio
del usuario como en el nuestro propio como propietarios del sitio.
implantacin de aplicaciones web
Unidad 4. PHP (3). sesiones y bases de datos
(6)
(4.1.3) tcnicas para almacenar el estado de una sesin
Uso de la direccin IP. El array $_SERVER proporciona este dato del usuario
entre otros (se puede usar $_SERVER["REMOTE_HOST"] o
$_SERVER["REMOTE_ADDR"]. Eso en principio permite identificarle; pero no
es un mtodo seguro ya que el usuario/a puede acceder desde servidores proxy
o utilizando otras tecnologas que no nos permitan identificar con seguridad su
direccin IP.
Uso de variables ocultas de formulario. Cada vez que el usuario realice
acciones que supongan datos a almacenar (los productos que va comprando, el
usuario y contrasea con el que se identifica,) los podemos pasar mediante
campos de formulario oculto o bien aadindoles a la cadena URL de cada
enlace por el sitio. Es posible usarlo siempre que tengamos la capacidad de
identificar de forma nica la sesin y de ser pasar los datos de enlace en
enlace. El problema es que el paso por GET (el ms cmo de mantener
mediante esta tcnica) muestra los parmetros y eso es tremendamente
inseguro.
Adems, por mucha pericia que tengamos con esta tcnica, es muy pesada de
utilizar y lastra el desarrollo del conjunto del sitio web.
Almacenar datos de sesin en bases de datos o ficheros en el servidor.
Permite incluso que el usuario abandone el sitio web y puede, sin embargo,
mantener la sesin que abandon. Lo malo es que si tenemos una enorme
cantidad de usuarios en nuestro sitio web, se convierte en un imposible
mantener el sitio con esta tcnica.
Uso de cookies. La idea es la misma que en la anterior, slo que la informacin
no se guarda en el servidor sino en un archivo en el cliente. Ese archivo es lo
que se conoce como una cookie. El usuario no ser ni siquiera consciente el
almacenamiento de la cookie, pero en ella almacenaremos los datos de la
sesin y podremos mantener esa informacin sobre el usuario.
Lo malo es que la usuario o el usuario pueden bloquear las cookies o borrarlas y
eso est fuera de nuestro control por lo que es una tcnica que tiene tambin
sus riesgos.
(4.1.4) uso de cookies
Son indudablemente la opcin ms habitual para almacenar la informacin del usuario.
Lo malo es lo ya comentado, el cliente de un sitio web puede prohibir o borrar las
cookies almacenadas.
Las cookies son un archivo de texto que almacenan informacin sobre el usuario y
que se guardan en el propio ordenador del usuario. Contiene esencialmente nombres de
variables y valores (de tipo string) de las mismas. Esas variables son las que se usan para
guardar la informacin sobre el usuario.
Las cookies se pasan en la cabecera de la peticin http por lo que su informacin
viaja en el mismo paquete. En el momento que el servidor decide grabar los datos de la
cookie, esta viaja con el paquete en todas las peticiones y respuestas de esa sesin.
Los datos de la cookie viajan en la cabecera, por lo que el servidor debe almacenar
dichos datos antes de hacer uso de cualquier instruccin en pantalla.
2 curso de administracin de sistemas informticos en red
autor: Jorge Snchez www.jorgesanchez.net
(7)

Ilustracin 1, Funcionamiento de las cookies
setcookie
La funcin setcookie es la encargada de aadir (o borrar) una nueva cookie. Sintaxis:
setcookie(nombre [,valor [,expiracin [,ruta [,dominio [, segura [sloHttp ]]]]] )
Los parmetros son:
nombre. Es el nombre que le damos a la cookie. Despus podremos consultarle
para poder saber su valor.
valor. Valor que le damos a la cookie. Si no indicamos valor alguno, entonces
estaremos borrando la cookie.
expiracin. Por defecto toma el valor cero, que significa que la cookie caduca
en cuanto se cierre el navegador con el que se cre. Otra posibilidad es indicar
una fecha en formato Unix. Por ejemplo time()+600 indicara que la cookie
expira dentro de 10 minutos
dominio. Si no se indica nada toma como dominio en el que se aplica la cookie
el dominio actual, pero se puede indicar otro.
segura. Por defecto vale false, si indicamos true; entonces indica que la cookie
slo se almacena si estamos comunicndonos mediante un protocolo seguro.
soloHttp. Disponible desde la versin 5.2 de PHP. Indica que la cookie slo est
disponible mediante el protocolo http y no, por ejemplo, desde JavaScript. Se
supone que evita inseguridades al utilizar cookies; pero es un tanto discutible.
Ejemplos:
setcookie("visitas",1);
//graba la cookie visitas con valor 1 y que caduca con esta sesin
setcookie("usuario","andrei",time()+60*60*24)
//graba la cookie con nombre usuario que caducar al da siguiente
implantacin de aplicaciones web
Unidad 4. PHP (3). sesiones y bases de datos
(8)
acceder a los datos de las cookies
El array global $_COOKIES contiene las cookies almacenadas en el equipo del cliente,
de modo que para acceder al valor de una cookie se indicar el nombre de la cookie
como ndice de este array. Por ejemplo $_COOKIE["visitas"] devolvera el valor de la
cookie con nombre visitas (suponiendo que est definida dicha cookie). Ejemplo de
lectura de una cookie:
if(isset($_COOKIE["visitas"])){
echo "esta es tu visita nmero".$_COOKIE["visitas"];
}
borrar cookies
Cuando se vuelve a utilizar la funcin setcookie indicando el nombre de una cookie ya
existente y un nuevo valor, el nuevo valor sobrescribe el anterior valor que tuviera
dicha cookie.
Bajo la misma idea si usamos setcookie indicando un nombre de cookie existente y
el valor cero o false, entonces se eliminar la cookie con ese nombre. Ejemplo:
setcookie("visitas",false); //elimina la cookie de nombre visitas
Podemos tambin eliminar cookies ms antiguas indica una fecha de caducidad anterior
a la actual, por ejemplo:
setcookie("visitas",false,time()-60*60*24);
//elimina la cookie de nombre visitas con fecha de caducidad de un da
//hasta este momento
almacenar datos binarios
En la cookies no se pueden almacenare datos binarios, slo strings. Es decir no es vlido
el cdigo:
setcookie("notas",array(9,7,6,5)); //invlido: datos binarios
Por ello todos los programadores para almacenar datos binarios (como los arrays), crean
mecanismos para convertir lo binario en texto. En general al proceso de convertir los
datos en un formato almacenable se le conoce como serializar (traduccin
excesivamente literal del ingls serialize).
De hecho PHP incorpora una funcin que realiza automticamente este proceso, que
se llama precisamente serialize. A esta funcin se le pasa un dato binario y le convierte
en texto. De ese modo el array puede ser almacenado mediante la instruccin:
setcookie("notas",serialize(array(9,7,6,5))); //invlido: datos binarios
El problema ahora es que cuando lo queramos leer, tenemos el problema contrario: es
decir convertir el texto en el binario correspondiente. Ese proceso es incluso ms difcil;
pero PHP lo facilita mediante la funcin contraria: unserialize. Para extraer el array del
ejemplo usaramos:
$variableArray=unserialize($_COOKIE["notas"]));
2 curso de administracin de sistemas informticos en red
autor: Jorge Snchez www.jorgesanchez.net
(9)
(4.1.5) uso de sesiones en PHP
ventajas y desventajas
Comparadas con las cookies ofrecen estas ventajas
Pueden funcionar aunque el usuario/a desactive la posibilidad de cookies
(podran pasar el identificador de sesin mediante GET).
Almacenan ms informacin que una cookie y adems son capaces de
almacenar datos binarios.
Son ms seguras puesto que los datos que se almacenan de la sesin lo hacen
en el servidor y no en el cliente. En principio la seguridad de los servidores es
mayor que la de los ordenadores de los usuarios
Desventajas:
Son susceptibles al ataque conocido como secuestro de sesin (session
hijacking), mediante el cual un usuario se puede hacer con el identificador de
sesin de otro usuario y hacerse pasar por l.
El identificador de sesin se almacena mediante cookies, por lo que si no nos
damos cuenta podramos tener la misma dependencia con al configuracin que
tenga el usuario en el navegador.
funcionamiento
El manejo de sesiones parte de asignar un identificador a cada sesin. PHP dispone de la
posibilidad de calcular dicho nmero de sesin para que sea nico en cada sesin de
usuario. Tras lo cual podemos identificar de formas unvoca a cada sesin. Ese
identificador es el que se relacionar con los datos del usuario.
Los pasos son los siguientes:
(1) Se genera un id aleatorio. Para ello se invoca a la funcin session_start().
(2) Se almacena cada dato de la sesin. Se asigna un nombre y un valor a cada dato
de la sesin que deseemos almacenar. Para ello disponemos del array
$_SESSION, cuyos ndices son los nombres de las variables de sesin a las cuales
asignamos valores. Los ndices son strings, pero (a diferencia de lo que ocurre
con las cookies), los valores pueden ser binarios (incluso podemos almacenar
arrays directamente)
(3) En una pgina en la que deseemos recoger los datos almacenados de las sesiones,
bastar con llamar a session_start() para poder recoger los valores de la sesin.
(4) Mediante el array $_SESSION podremos leer o escribir nuevos datos en la sesin
En realidad las sesiones son ms sencillas de manejar que las cookies.
implantacin de aplicaciones web
Unidad 4. PHP (3). sesiones y bases de datos
(10)

Ilustracin 2, Funcionamiento de las sesiones PHP
La cuestin es Cmo se pasa el identificador de sesin de peticin en peticin?
Disponemos de dos posibilidades:
Mediante una cookie. Se crea una cookie cuyo nombre es el nombre de la
sesin y cuyo valor es el identificador de la sesin. En PHP es la opcin por
defecto. Lo malo es que el usuario puede prohibir utilizar cookies; lo bueno es
que es ms difcil obtener el identificador de sesin.
Para que esta opcin sea la que funcione (si no fuera as) hay que modificar el
archivo de configuracin php.ini y colocar estos valores:
session.use_cookies 1
session.use_trans_id 0
Mediate GET. En este caso se pasa el identificador de la sesin acompaando a
cada peticin mediante el uso de una cadena de consulta GET. Es decir que si
nuestra sesin tiene el nombre de PHPID y el identificador fuera el
8FR45237A89 y estamos con la sesin ya iniciada y en la URL
http://prueba.com/pog1.php la URL que tendremos ser:
http://prueba.com/pog1.php?PHPID=8FR45237A89
Para que sea esta la opcin que est funcionando, deberemos modificar el
archivo php.ini y hacer estos cambios:
session.use_cookies 0
session.use_trans_id 1
Normalmente la sesin caduque en cuanto el usuario abandona el navegador. Se puede
hacer (sobre todo si el identificador es una cookie) que dure ms, pero no es lo
recomendable. Las sesiones deben caducar cuando el usuario cierra la sesin, de otro
modo hay ms posibilidad de inseguridad y adems es la forma habitual de usar
sesiones. Si necesitamos esa perdurabilidad de la sesin, lo lgico es usar cookies o
bases de datos.
2 curso de administracin de sistemas informticos en red
autor: Jorge Snchez www.jorgesanchez.net
(11)
iniciar sesin
Una sesin comienza en la primera pgina PHP que invoque a la funcin session_start.
Esta funcin no tiene argumentos, simplemente inicia la sesin (si no ha sido iniciada
ya) lo cual implica:
(1) Crear un identificador aleatorio de sesin
(2) Crear el archivo en el que se almacenarn los datos de la sesin en el servidor
(3) Crear la variable global $_SESSION, array en el que se almacenarn los datos de
la sesin.
Si la sesin ya haba sido iniciada cuando se invoc a sessin_start, entonces no se crea
una nueva sesin sino que:
(1) Se sigue utilizando la sesin anterior
(2) Permite el uso del array $_SESSION que contendr los datos de la sesin
Con lo cual todas las pginas que quieran utilizar la sesin iniciada tienen que invocar a
session_start.
obtener datos de la sesin
Dos funciones permiten obtener (y cambiar) los datos de la sesin
session_id. Si la invocamos sin parmetros, devuelve el identificador de sesin
actual. Admite que le pasemos un identificador de sesin nosotros, con lo que
ese se convierte en el identificador de la sesin actual. Poner nosotros nmeros
de sesin propios es peligroso en cuanto a que si no tenemos un buen algoritmo
de clculo del identificador podramos tener dos sesiones
session_name. Si la invocamos sin parmetros, devuelve el nombre de sesin
actual (por defecto PHPID). Admite que le pasemos un nombre de sesin
nosotros. Esto es til para que no sea tan claro que estamos usando sesiones
PHP ya que el nombre PHPID es conocido por todos los programadores PHP.
La directiva session.name en el archivo de configuracin php.ini permite
asignar otro nombre por defecto para las sesiones.
usar variables de sesin
Para almacenar un dato de sesin basta usar esta sintaxis:
$_SESSION["clave"]=valor
Para recoger un valor almacenado se utiliza la misma clave en el array. Como hemos
comentado es posible incluso almacenar datos binarios con lo que las sesiones son
bastante ms verstiles que las cookies.
borrar datos de sesin
Si deseamos eliminar un dato de la sesin basta con usar la funcin PHP de eliminacin
de variables unset. De modo que si deseamos eliminar una variable de sesin llamada
visitas, haremos:
unset($_SESSION["visitas"])
implantacin de aplicaciones web
Unidad 4. PHP (3). sesiones y bases de datos
(12)
Para eliminar todos los datos, hay que hacer esta secuencia:
unset($_SESSION);
$_SESSION=array();//imprescindible, sino la sesin queda inutilizable
eliminar la sesin entera
Eliminar la sesin en s consiste en:
session_start(); //si no la hubieramos llamado ya
unset($_SESSION); //elimina el array, sino queda gastando memoria
session_destroy();//funcin de eliminacin en s de la sesin
(4.2) bases de datos
(4.2.1) ventajas de las bases de datos
El uso de bases de datos es imprescindible en cualquier aplicacin web de hoy en da.
Algunas razones para utilizarlas son:
Proporcionan almacenamiento permanente. Es decir, los datos que se
almacenan resisten entre sesiones con lo cual son un mtodo ideal cuando la
informacin no se desea eliminar en ningn momento.
Aaden una capa ms de seguridad. Los datos estn fuera del alcance directo
del usuario ya que no se almacenan en las peticiones http. Los datos se
encuentran en un servidor de base de datos con el que se comunica el servidor
web. En esta comunicacin no interviene el usuario. Aunque hay tcnicas para
intentar acceder a la base de datos usando trucos, lo cierto es que las bases de
datos son un software ms preparado para la seguridad que si nosotros
gestionramos directamente la informacin
Proporcionan herramientas avanzadas de gestin de datos y usuarios. Los
Sistemas Gestores de Bases de Datos son un software especializado en la
gestin de datos, permite hacer consultas avanzadas, crear diferentes vistas y
permitir su uso a ciertos usuarios, copias de seguridad, transacciones,
Uso del lenguaje SQL. El lenguaje ms conocido para el manejo de datos en
bases de datos relacionales, est disponible y esto significa que podremos usar
toda su potencia en nuestras pginas web.

Ilustracin 3, Funcionamiento de las bases de datos en PHP
2 curso de administracin de sistemas informticos en red
autor: Jorge Snchez www.jorgesanchez.net
(13)
(4.2.2) instalacin y configuracin de MySQL
MySQL es la base de datos idnea para trabajar con PHP. Normalmente los paquetes
como xampp la traen incorporada y ya preparada para instalar.
En estos apuntes no se explica la instalacin de MySQL (los pasos detallados sobre su
instalacin estn disponibles en www.jorgesanchez.net/bd/abd.html en los apuntes
Instalacin y configuracin de bases de datos).
Desde xampp podemos gestionar ntegramente la creacin de bases de datos a
travs de PHPMyAdmin, un gestor web de MySQL integrado en el servidor xampp.
Este proceso no se describe en estos apuntes, pero es sencillo.
(4.2.3) conexin a MySQL desde PHP
La conexin entre PHP y MySQL requiere de la creacin de un enlace o conector entre
el servidor de aplicaciones PHP. El funcionamiento del enlace a la base de datos
depende de que est instalado correctamente el paquete en PHP que permite la
conexin, en este caso, a MySQL.
La funcin PHP que se encarga de establecer el enlace es mysql_connect. La
sintaxis es:
mysql_connect([servidor [,usuario [,contrasea [,nuevoEnlace [,flags]]]])
Los parmetros son todos opcionales. Se explican a continuacin:
servidor. Nombre y puerto de la mquina a la que nos conectamos (es decir el
servidor MySQL). Se indica su nombre o IP y (opcionalmente el puerto). Si no se
indica su valor se recoge de la directiva PHP (presente en el archivo de
configuracin php.ini) mysql.default_host que, normalmente, vale
localhost_3306 (es decir, conexin a servidor local MySQL mediante el puerto
3306, el puerto habitual de comunicacin de MySQL).
usuario. Nombre del usuario de la base de datos con el que nos conectamos (y
que, por lo tanto, al menos tendr permiso de conexin). De no indicarlo, se
recoge de la directiva PHP mysql.default_user.
contrasea. Contrasea del usuario con el que nos conectamos. Si no se indica
se recoge de la directiva mysql.default_password (por defecto vale nulo).
nuevoEnlace. No se suele usar mucho este parmetro. De no hacerlo si
volvemos a invocar a esta funcin utilizando los mismos parmetros (mismo
servidor, usuario, contrasea) que ya se utilizaron en la llamada previa;
entonces no se crea un nuevo enlace, se devuelve el mismo enlace anterior.
Para evitarlo y que s podamos obtener un enlace nuevo, a este parmetro se le
indica el valor true.
flags. Permite utilizar constantes predefinidas para variar diversos aspectos con
el enlace a la base de datos:
MYSQL_CLIENT_COMPRESS. Utiliza protocolo de compresin en la
comunicacin con la base de datos.
MYSQL_CLIENT_IGNORE_SPACE. Ignora los espacios posteriores en los
nombres de las funciones.
MYSQL_CLIENT_INTERACTIVE. Permite que la conexin siga activa aunque
el usuario lleve unos segundos sin actividad.
implantacin de aplicaciones web
Unidad 4. PHP (3). sesiones y bases de datos
(14)
MYSQL_CLIENT_SSL. La comunicacin se realiza utilizando encriptacin SSL (si
est disponible).
Ejemplo:
$con=mysql_connection(localhost,'prueba','12345');
En el ejemplo conectamos con el servidor local de MySQL utilizando el usuario prueba
con contrasea 12345.
Si la conexin es correcta, la funcin devuelve los valores de la conexin (el enlace a
datos) que se suele asignar a una variable (en el ejemplo anterior se los queda $con).
En el caso de que falle (por que el usuario no tiene esa contrasea, o el servidor no est
funcionando , etc. etc.), entonces la funcin devuelve falso.
(4.2.4) cerrar la conexin con la base de datos
La funcin mysql_close es la encargada de esta labor. Recibe un parmetro que ser el
enlace a la base de datos (si no se pasa ninguna tomar el ltimo enlace creado
mediante mysql_connect). Siempre es conveniente cerrar las conexiones, de no hacerlo
estaremos malgastando recursos; aunque MySQL con el tiempo cerrar todas las
conexiones que se hayan abierto y no se utilicen, si dejamos que lo haga MySQL podra
ocurrir que no tuviera tiempo de cerrar si abrimos demasiadas conexiones ( y no
cerramos ninguna).
(4.2.5) captura de errores
error_reporting
Al utilizar bases de datos hay muchos posibles errores que pueden ocurrir. De hecho si
no funciona la conexin, todo lo dems que nuestra aplicacin quisiera realizar, no sera
posible.
La configuracin de PHP (mediante el archivo php.ini) permite especificar qu tipo
de errores se mostrarn al usuario. Esto ya se ha comentado en la primera unidad de
estos apuntes. La directiva error_reporting es la encargada de decidir qu errores se
muestran y cules se ignoran.
Inicialmente cuando estamos en proceso de depuracin de nuestro cdigo, nos
interesa mostrar todo lo que ocurre, pero cuando pasamos a produccin, slo lo ms
grave debera mostrarse. Por ello debemos calibrar bien la directiva error_reporting a
nuestras necesidades. Sus posibles valores son:
E_ERROR: Slo se mostrarn los errores fatales (errores irrecuperables,
graves).
E_WARNING. Se muestran las advertencias(warnings) que son errores ms
leves.
E_NOTICE. Avisos en tiempo de ejecucin (ms leves que las anteriores).
E_CORE_ERROR. Igual que E_ERROR pero slo muestra los errores procedentes
del ncleo de PHP
E_CORE_WARNING. Igual que E_WARNING pero slo muestra los errores
procedentes del ncleo de PHP
E_COMPILE_WARNING. Avisos de compilacin de motores como Zend.
E_USER_ERROR. Errores generados por el propio programador.
2 curso de administracin de sistemas informticos en red
autor: Jorge Snchez www.jorgesanchez.net
(15)
E_USER_WARNING. Advertencia generados por el propio programador.
E_USER_NOTICE. Avisos generados por el propio programador.
E_STRICT. Avisa del cdigo utilizado por el programador que, aunque funciona,
no es correcto (porque podra tener problemas en versiones futuras de PHP).
E_RECOVERABLE_ERROR. Error fatal, pero que no impidi la ejecucin del
motor PHP al no considerarse inestable tras el fallo.
E_ DEPRECATED. Avisos sobre cdigo obsoleto.
E_ USER_DEPRECATED. Avisos sobre cdigo obsoleto lanzados por el propio
programador.
E_ALL. Muestra todos los errores (salvo los E_STRICT hasta la versin 5.4 de
PHP).
Inicialmente el valor de error_reporting en el archivo php.ini est establecido de esta
forma:
error_reporting = E_ALL | E_STRICT
significa que se muestran todos los errores, incluidos aquellos sobre cmo mejorar el
cdigo.
Si usamos:
error_reporting = E_ERROR
Slo se muestran los errores fatales.
No obstante podemos no cambiar el archivo php.ini y utilizar la funcin
error_reporting que permite modificar el nivel de errores que se muestran, pero en
tiempo de ejecucin. Es decir desde el momento en el que se invoca a la funcin
decidiremos que errores se mostrarn independientemente de la configuracin de
php.ini.
Ejemplo:
error_reporting(E_ERROR);
mysql_error y mysql_errno
Muchas veces nos conviene capturar los errores que proceden de la base de datos MySQL
para desde el programa decidir lo que hacer dependiendo del error. Para ello
disponemos de do dos funciones:
mysql_error. Devuelve el texto del ltimo error detectado por MySQL.
mysql_errno. Devuelve el nmero de error.
A ambas funciones se les pasa el enlace de conexin (si no reciben ningn parmetro
utilizarn el ltimo enlace con la base de datos que se haya creado.
implantacin de aplicaciones web
Unidad 4. PHP (3). sesiones y bases de datos
(16)
Ejemplo:
$con=mysql_connect("localhost","prueba","12345");
if($con){
.
mysql_close($con);
}
else{
echo "Error: conexin no realizada, respuesta del servidor: ".
mysql_error($con)."N de error".mysql_errno($con);
}
(4.2.6) seleccionar base de datos
En MySQL las tablas pertenecen a una base de datos, por lo que lo habitual es
seleccionar la base de datos para de ese modo trabajar de forma cmoda con las tablas
y vistas de dicha base de datos.
PHP permite seleccionar la base de datos mediante la funcin mysql_select_db a la
que se le pasa el nombre de la base de datos (entre comillas, es decir como string) y,
opcionalmente, el nombre del enlace de base de datos (si no se indica este parmetro
se usa el ltimo enlace a base de datos realizado con mysql_connect).
(4.2.7) tipos de datos MySQL
Las tablas (y las vistas) son el objeto de trabajo con una base de datos. En el caso de
MySQL los datos que contiene cada columna de una tabla pueden ser de tipo:
Enteros: A todos ellos se les puede aadir el texto UNSIGNED para indicar que
slo valen nmeros positivos (adems doblan el rango posible de nmeros
positivos). En los enteros se puede, adems, indicar AUTO_INCREMENT
significara que el nmero se calcula slo para cada nueva fila, es muy til para
columnas que queremos sean clave, pero que no queremos rellenar su valor.
INT o INTEGER. Nmeros enteros de -2147483647 a 2147483648. Son
nmeros de que ocupan 32 bits
SMALLINT. Nmeros enteros de 16 bits. De 32168 a -32167
TINYINT. Nmeros enteros de un byte (8 bits), de -128 a 127
BIGINT. Para nmeros enteros enormes (de 64 bits).
FLOAT. Nmeros de coma flotante (16 bits). Con precisin simple
DOUBLE. Nmeros de coma flotante (32 bits) de precisin doble
DEC o DECIMAL. Se le indica el nmero de cifras y el nmero de decimales
(por ejemplo decimal(9,2)). Sirve para indicar nmeros decimales de coma
fija (exactos).
NUMERIC. Prcticamente equivalente al anterior.
Texto: Son los mismos tipos que posee SQL estndar:
CHAR. Texto de longitud fija (como un dni)
VARCHAR. Texto de longitud variable
2 curso de administracin de sistemas informticos en red
autor: Jorge Snchez www.jorgesanchez.net
(17)
Fecha y hora:
DATE. Para fechas
TIMESTAMP. Para instantes concretos de tiempo (fecha y hora)
YEAR. Para representar aos.
Elementos especiales
TINYTEXT, TEXT, MEDIUMTEXT y LONGTEXT. Almacenan textos pensados
para informacin que no es clave. La diferencia est entre los cuatro tipos
est en el tamao del texto que pueden almacenar. El texto almacenado
no puede ser parte de un ndice no clave principal o secundaria
TINYBLOB, BLOB, MEDIUMBLOB y LONGBLOB. Almacenan datos binarios.
La diferencia entre los cuatro est en el tamao mximo de datos que
permiten.
ENUM. Permite almacenar valores enumerados. Estos es un valor que est
en una lista de valores posibles.
SET. Similar al anterior, lista de cadenas de caracteres.
(4.2.8) ejecucin de instrucciones SQL
SQL genrico de MySQL
La funcin ms verstil de PHP para utilizar bases de datos es la funcin mysql_query
dicha funcin admite dos parmetros, el primero es una instruccin SQL compatible con
MySQL y el segundo (opcional) la variable de enlace a la base de datos. Ejemplo:
mysql_query("CREATE TABLE personas(id_persona INTEGER,".
"nombre VARCHAR(25))", $con);
Esta instruccin crea (si el usuario con el que se ha conectado tiene permisos) una tabla
en la base de datos seleccionada de MySQL. Para comunicar con MySQL usa la variable
$con que debe tener asociado un enlace correcto a MySQL.
Si la instruccin no funciona, entonces mysql_query devuelve false. En otro caso
devuelve true (excepto para las instrucciones, como SELECT, que devuelven una vista
de los datos).
problemas de seguridad
Puesto que muchas veces los datos que se envan a travs de SQL al servidor utilizan
formularios que rellenan los usuarios, los hackers podran tener un resquicio de acceso a
la base de datos mediante tcnicas de inyeccin SQL, en la cual en lugar de responder
a lo que pide el formulario, se aaden manera camuflada otras sentencias.
Para evitar este problema podemos pasar primero la instruccin por la funcin
mysql_real_escape_string que lo que har es que los caracteres peligros (como las
comillas, saltos de lnea, etc.) se pasan a su forma escapada (es decir ' se convierte en
\'), con lo cual no se pueden delimitar nuevas instrucciones y tendremos proteccin
frente al ataque por inyeccin de SQL.
Es decir, debera ser obligatorio llamar a mysql_query usando esta forma:
mysql_query(mysql_real_escape_string($instruccionSQL),$con);
implantacin de aplicaciones web
Unidad 4. PHP (3). sesiones y bases de datos
(18)
recuento de filas afectadas
Podemos necesitar, sobre todo en instrucciones DML (INSERT, DELETE o UPDATE) de
SQL, saber cuntas filas de las tablas estamos modificando. Para ello basta utilizar la
funcin mysql_affected_rows la cual (a la que enviamos el enlace de conexin) que
devolver el nmero de filas modificadas por la ltima instruccin DML que se haya
enviado a MySQL.
SQL con instrucciones SELECT
En el caso de querer ejecutar instrucciones de tipo SELECT (tambin DESCRIBE, SHOW o
EXPLAIN, propias de MySQL), como en stas su resultado en una vista de los datos;
entonces la funcin mysql_query en la que se ejecute alguna de estas instrucciones,
devuelve un conjunto de resultados (un result set).

Un conjunto de resultados es un elemento capaz de recoger el resultado de una
consulta SQL. De modo que a travs de l podemos mostrar el resultado de dicha
consulta mediante PHP. Ejemplo:
$res=mysql_query("SELECT nombre,apellido1,telefono FROM clientes");
$res es la variable que recoger el conjunto de resultados (o false, si falla la
instruccin SQL).
Los conjuntos de resultados pueden ser pasados como parmetro a otras funciones.
La ms interesante para poder analizar los resultados es mysql_fetch_assoc. Esta
funcin permite recorrer fila a fila los resultados de un conjunto de resultados.
Es decir la forma de recorrer los resultados de un SELECT desde PHP es:
(1) Usar mysql_query para lanzar la instruccin SQL. Su resultado ser un result set
que ser recogido por una variable
(2) La variable se le pasa a mysql_fetch_assoc, sta devuelve un array asociativo
que contiene los valores de la primera fila de la consulta (cada ndice ser el
nombre de una columna y el valor el correspondiente a esa columna en esa fila).
Si no hay resultados, devuelve false
(3) Se siguen mirando el resto de filas de la misma forma hasta que
mysql_fetch_assoc devuelve false.
Hay una funcin llamada mysql_fetch_array que funciona como mysql_fetch_assoc
pero el array devuelto no tiene por qu ser asociativo. Que lo sea o no depende de un
segundo parmetro que puede ser MYSQL_ASSOC (devolver lo mismo que
mysql_fetch_assoc), MYSQL_NUM (devuelve un array escalar) y MYSQL_BOTH
(devuelve ambos).
No obstante lo lgico es usar siempre mysql_fetch_assoc ya que es ms coherente
con el funcionamiento de las bases de datos relacionales.
2 curso de administracin de sistemas informticos en red
autor: Jorge Snchez www.jorgesanchez.net
(19)
Ejemplo completo de conexin (pgina que muestra los resultados de una vista sobre
una tabla de la base de datos en una pgina web):
<!doctype html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Lista de usuarios</title>
</head>
<body>
<table>
<?php
//establecimiento de la conexin
$con=mysql_connect("localhost","web","12345");
if($con){
//seleccin de la base de datos
mysql_select_db("web",$con);
//realizacin de una consulta
$res=mysql_query("SELECT nombre,contra FROM usuarios2;",$con);
$array=mysql_fetch_assoc($res); //tomamos la primera fila
echo "<tr><th>Usuario</th><th>Contrasea</th></tr>";
while($array){//se repite hasta que deje de haber datos
echo "<tr><td>".$array["nombre"].
"</td><td>".$array["contra"]."</td></tr>";
$array=mysql_fetch_assoc($res); //leemos la siguiente fila
}
mysql_close($con);//cerramos el enlace de datos
}
else{
die("Error al conectar con la base de datos ".mysql_error());
}

?>
</table>
</body>
</html>

Vous aimerez peut-être aussi