BASES DE DATOS Hasta ahora hemos visto la funciones

Anuncio
ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA
301127- Programación de sitios web
Act 12: Lección Evaluativa 3
BASES DE DATOS
Hasta ahora hemos visto la funciones básicas de PHP, lo que viene a continuación
ya es sobre la forma en como podemos acceder a bases de datos, veremos como
acceder a ellas en dos sistemas de bases de datos diferentes, los cuales son
MySQL Server y Microsoft Access.
El primer sistema que veremos es MySQL Server, pero antes de ver código PHP,
aprenderemos un poco de este sistema, para los ejemplos en PHP ya va a ser
necesario que tengamos una base de datos creada por lo tanto pondremos
atención en las formas en que estas se crean.
QUE ES MYSQL
Administrador de Base de Datos Una base de datos es un conjunto de datos
estructurados. Esto podría ser cualquier cosa, desde una simple lista de compras
hasta una galería de pinturas o la gran cantidad de información que se maneja en
una corporación. Para agregar, acceder y procesar los datos almacenados en una
base de datos computacional, se necesita un sistema administrador de base de
datos tal como MySQL. Además los computadores son muy buenos manejando
grandes cantidades de datos, el administrador de base de datos juega un rol
central en la computación, ya sea como utilidad autónoma o parte de otra
aplicación.
Sistema administrador de base de datos relacionales Una base de datos relacional
almacena datos en tablas separadas, más bien colocando todos los datos en un
gran almacén. Esto agrega velocidad y flexibilidad. Las tablas son enlazadas por
relaciones definidas haciendo posible combinar datos desde varias tablas
solicitadas. El SQL forma parte de MySQL, conocido como Lenguaje de Consultas
Estructurado, es el lenguaje estandarizado más común usado para acceder base
de datos.
Software de Fuente Abierta
Fuente abierta significa que es posible que pueda ser usado y modificado por
cualquiera. Alguien puede bajar MySQL desde Internet y usar éste sin tener que
pagar nada. Alguien puede estudiar el código fuente y cambiarlo de acuerdo a sus
1
ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA
301127- Programación de sitios web
Act 12: Lección Evaluativa 3
necesidades. MySQL usa el GPL de la GNU, para definir lo que se puede hacer
con el software en diferentes situaciones.
Uso de MySQL
MySQL es muy rápido, seguro y fácil de usar. MySQL también ha desarrollado un
conjunto de características muy prácticas, en estrecha cooperación con otros
usuarios. MySQL fue desarrollado para manejar grandes bases de datos mucho
más rápido que las soluciones existentes y ha sido usado exitosamente en
ambientes de producción con altas demandas, por varios años. Aunque está bajo
un desarrollo constante, MySQL siempre ofrece conjunto de funciones muy
poderoso y eficiente. La conectividad, velocidad y seguridad hace de MySQL una
suite poderosa para acceder a bases de datos en Internet.
CARACTERISTICAS TECNICAS DE MYSQL
Características Técnicas de MySQL
MySQL es un sistema Cliente/Servidor que consta de un servidor SQL multihilo
que soporta diferentes backends, variados programas cliente y de librerías,
administrador de herramientas y un programa de interface.
MySQL contribución para muchos de los software disponibles Es mucho más
probable que se encuentre que diversas aplicaciones ya soportan MySQL. Los
valores centrales de MySQL son :
• La mejor y más usada base de datos en el mundo.
• Disponible y Accesible para todos
• Fácil de usar
• Se está perfeccionando continuamente mientras permanece rápida y segura.
• Divertida para usar y perfeccionar.
• Libre de molestias.
CARACTERISTICAS PRINCIPALES DE MYSQL
A continuación se describen algunas de las características más importantes de
MySQL:
2
ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA
301127- Programación de sitios web
Act 12: Lección Evaluativa 3
• Escrito en C y C++, testado con GCC 2.7.2.1. Usa GNU autoconf para
portabilidad.
• Clientes C, C++, Eiffel,PHP,Python,JAVA, Perl, TCL.
• Multiproceso, es decir puede usar varias CPU si éstas están disponibles.
• Puede trabajar en distintas plataformas y S.O. distintos.
• Sistema de contraseñas y privilegios muy flexible y segura.
• Todas la palabras de paso viajan encriptadas en la red.
• Registros de longitud fija y variable.
• 16 índices por tabla, cada índice puede estar compuesto de 1 a 15 columnas o
partes de ellas con una longitud máxima de 127 bytes.
• Todas las columnas pueden tener valores por defecto.
• Utilidad Isamchk para chequear, optimizar y reparar tablas.
• Todos los datos están grabados en formato ISO8859_1.
• Los clientes usan TCP o UNIX Socket para conectarse al servidor.
• Todos los comandos tienen -help o -? Para las ayudas.
• Soporta diversos tipos de columnas como enteros de 1, 2, 3, 4, y 8 bytes, coma ,
flotante, doble precisión, carácter, fechas, enumerados, etc.
• ODBC para Windows 95 (con fuentes), se puede utilizar ACCESS para conectar
con el servidor.
• Muy rápida usando joins, optimizada para un barrido multi-joins.
Todas las funciones y operadores soportan en el SELECT y WHERE como partes
de consultas. Ejemplo:
• mysql> SELECT CONCAT(nombre," ",apellido) FROM nombre_tabla WHERE
ingreso >10000 AND edad >30
Todas las clausulas SQL soportan GROUP BY y ORDER BY.
3
ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA
301127- Programación de sitios web
Act 12: Lección Evaluativa 3
Funciones para el manejo de php con mysql
mysql_connect ( )
Abre una conexión a un servidor MySQL
int mysql_connect ([string hostname [:puerto] [:/camino/al/socket] [, string usuario
[,string password]]])
Devuelve: Un identificador de enlace positivo si tiene exito, o falso si error.
mysql_connect()establece una conexión a un servidor MySQL. Todos los
argumentos son opcionales, y si no hay , se asumen los valores por defecto
(’localhost’, usuario propietario del proceso del servidor, password vacia).
El hostname puede incluir tambien un número de puerto . ej. "hostname:puerto"o
un camino al socket ej. ":/camino/al/socket"para localhost.
Nota: Soporte para ":puerto"fue añadido en PHP 3.0B4.
Soporte para ":/camino/al/socket"fue añadido en PHP 3.0.10.
En el caso de que se haga una llamada a mysql_connect() con los mismos
argumentos, no se establecerá un nuevo enlace, sino que se devolverá el enlace
ya abierto.
El enlace al servidor sera cerrado tan pronto como la ejecución del script finalice, a
menos que se cierre antes explicitamente llamando a mysql_close().
Ejemplo 1. Ejemplo de MySQL connect
<?php
$link = mysql_connect ("kraemer", "marliesle", "secret") {
or die ("Could not connect");
}
print ("Connected successfully");
mysql_close ($link);
?>
mysql_select_db ()
Selecciona un base de datos MySQL
4
ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA
301127- Programación de sitios web
Act 12: Lección Evaluativa 3
int mysql_select_db (string base_de_datos [, int identificador_de_enlace])
Devuelve : true si exito, false si error.
mysql_select_db() establece la base activa que estara asociada con el
identificador de enlace especificado. Si no se especifica un identificador de enlace,
se asume el ultimo enlace abierto. Si no hay ningun enlace abierto, la función
intentara establecer un enlace como si se llamara a mysql_connect().
Toda llamada posterior a mysql_query() utilizara la base activada.
mysql_fetch_array()
Extrae la fila de resultado como una matriz asociativa
array mysql_fetch_array (int id_resultado [, int tipo_de_resultado])
Devuelve una matriz que corresponde a la sentencia extraida, o falso si no quedan
más filas.
mysql_fetch_array() es una versión extendida de mysql_fetch_row(). Además de
guardar los datos en el indice numérico de la matriz, guarda también los datos en
los indices asociativos, usando el nombre de campo como clave.
Si dos o más columnas del resultado tienen el mismo nombre de campo, la última
columna toma la prioridad. Para acceder a la(s) otra(s) columna(s) con el mismo
nombre, se debe escificar el indice numerico o definir un alias para la columna.
select t1.f1 as foo t2.f1 as bar from t1, t2
La función mysql_fetch_array() no es significativemente mas lenta que
mysql_fetch_row(), sin embargo tiene un valor añadido importante.
El segundo argumento opcional tipo_de_resultado en mysql_fetch_array() es una
constante y puede tomar los valores siguientes: MYSQL_ASSOC, MYSQL_NUM,
y MYSQL_BOTH. (Esta funcionalidad fue añadida en PHP 3.0.7)
Ejemplo 1. mysql fetch array
<?php
mysql_connect($host,$user,$password);
$result = mysql_db_query("database","select * from table");
while($row = mysql_fetch_array($result)) {
echo $row["user_id"];
5
ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA
301127- Programación de sitios web
Act 12: Lección Evaluativa 3
echo $row["fullname"];
}
mysql_free_result($result);
?>
mysql_free_result ()
Libera la memoria del resultado
int mysql_free_result (int id_resultado)
mysql_free_result() solo necesita ser llamada si te preocupa usar demasiado
memoria durante la ejecución de tu script.
Toda la memoria del resultado especificado en el parametro del identificador de
resultado sera automaticamente liberada.
mysql_num_rows()
Devuelve el numero de filas de un resultado
int mysql_num_rows (int id_resultado)
mysql_num_rows() Devuelve el numero de filas de un identificador de resultado.
mysql_query ()
Envia una sentencia SQL a MySQL
int mysql_query (string sentencia [, int identificador_de_enlace])
mysql_query() envia una sentencia a la base activa en el servidor asociado al
identificador de enlace. Si no es especificado un identificador_de_enlace, se
asumira el ultilmo enlace abierto. Si no hay ningun enlace abierto, la función
intenta estalecer un enlace como si se llamara función mysql_connect() sin
argumentos, y lo utiliza.
La sentencia no puede terminar por punto y coma.
mysql_query() devuelve TRUE (no-cero) o FALSE para indicar si la sentencia se
ha ejecutado correctamente o no. Un valor TRUE significa que la sentencia era
correcta y pudo ser ejecutada en el servidor. No indica nada sobre el numero de
6
ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA
301127- Programación de sitios web
Act 12: Lección Evaluativa 3
fila devueltas. Es perfectamente posible que la sentencia se ejecute correctamente
pero que no devuelve ninguna fila.
La siguiente sentencia es invalida sintacticamente, asi que mysql_query() falla y
devuelve FALSE:
Ejemplo 1. mysql_query()
<?php
$result = mysql_query ("SELECT * WHERE 1=1")
or die ("Invalid query");
?>
La siguiente sentencia es invalida semanticamente si my_col no es una columna
de la tabla my_tbl, asi que mysql_query() falla y devuelve FALSE
mysql_affected_rows()
Devuelve el número de filas afectadas de la última operación MySQL
int mysql_affected_rows ([int identificador_de_enlace])
mysql_affected_rows() devuelve el número de filas afectadas en la ultima
sentencia INSERT, UPDATE o DELETE sobre el servidor asociado con el
identificador de enlace especificado. Si el identificador de enlace no ha sido
especificado, se asume por defecto el último enlace.
Si la última sentencia fue un DELETE sin clausula WHERE, todos los registros han
sido borrados de la tabla pero esta función devolvera cero.
Este comando no es efectivo para las sentencias SELECT, sino sólo para las
sentencias que modifican registros. Para conseguir el número de lineas devueltos
por un SELECT, usar mysql_num_rows().
mysql_result ()
Devuelve datos de un resultado
int mysql_result (int id_resultado, int numero_de_fila [, mixed campo])
mysql_result() devuelve el contenido de una celda de un resultado MySQL. El
campo argumento puede ser el nombre del campo o el offset o
tabla.nombre_del_campo. Si el nombre de la columna tiene un alias (’select foo as
bar from...’), utilice el alias en lugar del nombre de la columna.
7
ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA
301127- Programación de sitios web
Act 12: Lección Evaluativa 3
Cuando se trabaja un un gran resultado, debe considerarse la utilizacion de una
funcion que devuelva una fila entera ya que estas funciones son MUCHO mas
rapidas que mysql_result(). Tambien, especificando un offset numerico en lugar
del nombre del campo, la ejecucion sera mas rapida.
Las llamadas a mysql_result() no deben mezclarse con llamadas a las otras
sentencias que trabajan con un identificador de resultado
mysql_errno ()
Deuelve el número del mensaje de error de la última operación MySQL
int mysql_errno ([int identificador_de_enlace])
Los errores devueltos por mySQL no indican los warnings. Usar estas funciones
para encontrar el número de error.
<?php
mysql_connect("marliesle");
echo mysql_errno().": ".mysql_error()."<BR>";
mysql_select_db("nonexistentdb");
echo mysql_errno().": ".mysql_error()."<BR>";
$conn = mysql_query("SELECT * FROM nonexistenttable");
echo mysql_errno().": ".mysql_error()."<BR>";
?>
mysql_error ()
Devuelve el texto del mensaje de error de la última operación MySQL
string mysql_error ([int identificador_de_enlace])
Los errores devueltos por mySQL no indican los warnings. Usar estas funciones
para encontrar el número de error.
<?php
mysql_connect("marliesle");
echo mysql_errno().": ".mysql_error()."<BR>";
mysql_select_db("nonexistentdb");
echo mysql_errno().": ".mysql_error()."<BR>";
$conn = mysql_query("SELECT * FROM nonexistenttable");
echo mysql_errno().": ".mysql_error()."<BR>";
8
ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA
301127- Programación de sitios web
Act 12: Lección Evaluativa 3
?>
mysql_close ( )
cierra el enlace con MySQL
int mysql_close ([int identificador_de_enlace])
Devuelve: verdadero si exito, falso si error.
mysql_close() cierra el enlace con la base MySQL que esta asociada con el
identificador de enlace especificado. Si no se especifica el identificador de enlace,
se asume por defecto el último enlace.
Nota: Normalmente no es necesario ya que la aperturas no-persistentes son
cerradas automaticamente al final de la ejecución del script.
mysql_close() no
mysql_pconnect().
cerrará
los
enlaces
persistentes
Ejemplo 1. Ejemplo de MySQL close
<?php
$link = mysql_connect ("kraemer", "marliesle", "secret") {
or die ("Could not connect");
623
MySQL
}
print ("Connected successfully");
mysql_close ($link);
?>
9
generados
con
ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA
301127- Programación de sitios web
Act 12: Lección Evaluativa 3
Sesiones
¿Qué son las sesiones?, básicamente una sesión es la secuencia de páginas que
un usuario visita en un sitio web. Desde que entra en nuestro sitio, hasta que lo
abandona.
El término sesión en PHP, session en inglés, se aplica a esta secuencia de
navegación, para ello crearemos un identificador único que asignamos a cada una
de estas sesiones de navegación. A este identificador de sesión se le denomina,
comúnmente, como la sesión.
El proceso en cualquier lenguaje de programación podría ser algo así:
¿Existe una sesión?, si existe lo retomamos, si no existe la creamos y le damos un
identificador único.
Y para que no perdamos el hilo de la navegación del usuario deberemos asociar
esta sesión a todas las direcciones (URLs) y acciones de formularios. Podemos
también crear una cookie que incluya el identificador de sesión, pero es
conveniente recordar que la disponibilidad o no de las cookies depende del
usuario, y no es conveniente fiarse de lo que un usuario pueda o no tener
habilitado.
Lo contado hasta ahora es teoría pura y es aplicable a cualquier lenguaje de
programación C, Perl, etc. Los que programamos en PHP4 tenemos la suerte de
que toda la gestión de sesiones la hace el mismo PHP.
Por lo tanto lo comentado aquí sobre sesiones es solo aplicable a PHP4.
Inicialización de la sesión
Para utilizar sesiones en PHP lo primero es inicializarlas. Podemos hacerlo
explícitamente, mediante la función session_start(), o al registrar una variable en
una sesión mediante session_register('miVariable'). En ambos casos se crea una
nueva sesión, si no existe, o se retoma la sesión actual. Veamos un sencillo
ejemplo:
<?php
session_start();
echo "Se inició la sesión";
10
ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA
301127- Programación de sitios web
Act 12: Lección Evaluativa 3
?>
Esta es la forma más básica, si el usuario tiene las cookies activadas, PHP habrá
insertado de forma automática la sesión y ésta será pasada de una página a otra
sin hacer nada más. Desde un punto de vista práctico la sesión es operativa, pero
no vemos nada.
Podemos obtener la sesión en cualquier momento mediante la función
session_id().
<?php
session_start();
echo 'La sesión actual es: '.session_id();
?>
En este caso session_start() comprueba en las cookies que existe una sesión y
continua con ella, session_id() devuelve el identificador actual.
Veamos otro ejemplo que, tal vez, te lo aclare un poco más:
<?php
session_register('contador');
echo '<a href="'.$PHP_SELF.'?'.$SID.'">Contador vale:
'.++$contador.'</a>';
?>
Como dije anteriormente la sesión se crea si no existe o se recoge mediante
session_start(), o también cuando se registra una variable de sesión mediante
session_register().
Si no has utilizado nunca las sesiones, el concepto de variable de sesión, puede
resultar un poco extraño. Básicamente es una variable, como cualquiera de las
que gestiona PHP4, pero que reside en un espacio específico en el servidor, junto
con el identificador de sesión, y que pertenece únicamente a un usuario.
En nuestro ejemplo anterior, registramos la variable $contador en la primera línea
del script. En la segunda línea, entre otras cosas, cada vez que recarguemos la
11
ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA
301127- Programación de sitios web
Act 12: Lección Evaluativa 3
página o hagamos click sobre el enlace, el valor de $contador se incrementará en
1.
En esta línea hacemos uso de la variable reservada $PHP_SELF, que hace
referencia al propio script en ejecución y una constante propia de PHP4, $SID, que
contiene el nombre de la sesión y el identificador de la misma.
Podemos averiguar también el nombre de la sesión, o modificarlo, mediante la
función session_name().
12
Descargar