SISTEMAS DE ADMINISTRACIÓN DE
BASES DE DATOS RELACIONALES
PostgreSQL: INSTALACIÓN LINUX Y MANEJO DE TABLAS
MySQL: INSTALACIÓN WIN Y ACCESO A TRAVES DE PHP
Cristina Sánchez
Julia Sigles
1
COMERCIO ELECTRÓNICO
Índice
• Introducción
• Propiedades de lso RDBMS
• PostgrSQL
– Instalación en Linux
– Comentarios
– Crear una tabla
– Insertar datos en una tabla
– Extraer datos de una tabla
– Otras Instrucciones útiles
• MySQL
– Instalación en Windows
– Aspectos de configuración
– Instrucciones básicas de manipulación de tablas
– Ejemplo creación de BD
– Ejemplo de consulta de la BD desde la Web con PHP
– Ejemplo de introducción de datos a la BD desde la web con PHP
2
Introducción
• Por lo general, todo e-comercio necesita almacenar los datos de
sus clientes y pedidos para posteriormente ser servidos.
• Una posibilidad seria escribir los pedidos en archivos (método de archivos
planos), usando funciones como fopen(), fwrite(), fgets(), readfile(),
feof(), fclose(), etc. Tiene limitaciones en aspectos como el tamaño del
archivo, la difícil búsqueda de un registro, en accesos simultáneos,
imposible aplicar diferentes niveles de acceso, etc.
• Cuando se trata de un gran número de pedidos lo mejor es usar un sistema
de administración de base de datos relacional (basada en tablas) como
MySQL o PostgreSQL.
• Otra posibilidad para un sistema sencillo que no necesite base de datos
completa es la nueva extensión SQLite de PHP, que es una interfaz SQL a
un archivo plano. http://sqlite.org
3
Propiedades de los RDBMS
Los sistemas de administración de bases de datos implementan todas
la funciones necesarias en un sistema de almacenamiento:
1. Proporcionan acceso más rápido a los datos que los archivos planos. MySQL
es uno de los más rápidos.
2. Resulta sencillo consultarlos para extraer conjuntos de datos que se
correspondan con determinados criterios.
3. Incorporan mecanismos integrados para resolver el problema de accesos
simultáneos para que los programadores no tengan que preocuparse.
4. Proporcionan acceso aleatorio a los datos.
5. Incorporan sistemas de privilegios.
4
PostreSQL
5
PostgreSQL
PostgreSQL es un servidor de base de datos relacional libre bajo la
licencia BSD. Es una alternativa a otros sistemas de bases de datos de
código abierto (como MySQL, Firebird y MaxDB), así como sistemas
propietarios como Oracle o DB2.
Algunas de sus principales características son:
– Claves ajenas también denominadas llaves ajenas o llaves Foráneas (foreign
keys)
– Disparadores (triggers)
– Vistas
– Integridad transaccional
– Acceso concurrente multiversión (no se bloquean las tablas, ni siquiera las
filas, cuando un proceso escribe)
– Capacidad de albergar programas en el servidor en varios lenguajes.
– Herencia de tablas
– Tipos de datos y operaciones geométricas
6
Instalación de PostgreSQL en Linux
Nota: Caso para sistema operativo Debian GNU/Linux.
1. Descargar del sitio oficial de PostgreSQL http://www.postgresql.org/download/
los fuentes.
2. Suponiendo que el archivo *.tar.bz2 lo colocamos en /usr/local/, lo
descomprimimos:
SERVER:~# cd /usr/local
SERVER:/usr/local# bzcat postgresql-8.0.4.tar.bz2 | tar -xvf –
3. Creamos el Makefile, compilamos y copiamos los ejecutables a los lugares
apropiados:
SERVER:/usr/local# cd postgresql-8.0.4
SERVER:/usr/local/postgresql-8.0.4# ./configure
SERVER:/usr/local/postgresql-8.0.4# make
SERVER:/usr/local/postgresql-8.0.4# make install
En este momento ya tenemos instalado PostgreSQL.
7
Instalación de PostgreSQL en Linux
4. Para ejecutar el servidor de bases de datos, es requisito indispensable
que no corra como root, así que primero crearemos un usuario de sistema
llamado postgres:
SERVER:~# useradd postgres
Configuramos en el archivo /etc/passwd la línea del usuario que acabamos
de crear:
postgres:x:1001:1001::/var/pgsql/data:/bin/bash
Le asignamos un password al usuario con el comando passwd y luego
agregamos en el archivo /etc/group el grupo que le asignamos en el
/etc/passwd (en este caso 1001):
postgres:x:1001:
8
Instalación de PostgreSQL en Linux
5. Creamos un clúster de bases de datos de PostgreSQL, que contendrá las
bases de datos que vayamos creando. Al momento de inicializar un clúster de
bases de datos de PostgreSQL se tiene que indicar el directorio donde se
desea que se cree. El propietario de ese directorio tiene que ser un usuario
que no sea root. Como nosotras indicamos en el /etc/passwd que el HOME
del usuario postgres es /var/pgsql/data, siguiendo con esa lógica, vamos a
indicar que ése sea el directorio donde se localice el clúster de bases de
datos. Entonces creamos el directorio y le cambiamos de propietario:
SERVER:~# mkdir -p /var/pgsql/data
SERVER:~# chown postgres /var/pgsql/data
Ahora nos cambiamos al usuario postgres e inicializamos el clúster de bases
de datos con el comando initdb:
SERVER:~# su - postgres
[email protected]:~$ /usr/local/pgsql/bin/initdb -D /var/pgsql/data
9
Instalación de PostgreSQL en Linux
Nos aparece una ejecución como la siguiente:
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with locale C.
fixing permissions on existing directory /var/pgsql/data ... ok
creating directory /var/pgsql/data/global ... ok
creating directory /var/pgsql/data/pg_xlog ... ok
creating directory /var/pgsql/data/pg_xlog/archive_status ... ok
creating directory /var/pgsql/data/pg_clog ... ok
creating directory /var/pgsql/data/pg_subtrans ... ok
creating directory /var/pgsql/data/base ... ok
creating directory /var/pgsql/data/base/1 ... ok
creating directory /var/pgsql/data/pg_tblspc ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 1000
...
Success. You can now start the database server using:
/usr/local/pgsql/bin/postmaster -D /var/pgsql/data
or
/usr/local/pgsql/bin/pg_ctl -D /var/pgsql/data -l logfile start
10
Instalación de PostgreSQL en Linux
6. El siguiente paso es inicializar el servidor de bases de datos. Antes
agregamos unas líneas al archivo ‘.bash_profile’ del usuario postgres, para
evitar tener que escribir todo el path del clúster de BD cada vez que
inicializamos el servidorBD, y para agregar a nuestro path el directorio
donde están los comandos de postgres:
PGDATA=/var/pgsql/data
PATH=/usr/local/pgsql/bin:$PATH
export PATH PGDATA
Como el HOME que le asignamos al usuario postgres es /var/pgsql/data , el
archivo ‘.bash_profile’ deberá crearse en este directorio.
Como usuario postgres inicializamos el servidor de bases de datos con el
comando pg_ctl:
[email protected]:~$ pg_ctl start
postmaster starting
[email protected]:~$ LOG: database system was shut down at 2006-03-09 17:21:57 CST
LOG: checkpoint record is at 0/A38A34
LOG: redo record is at 0/A38A34; undo record is at 0/0; shutdown TRUE
LOG: next transaction ID: 544; next OID: 17230
LOG: database system is ready
Ahora PostgreSQL está en funcionamiento.
11
Instalación de PostgreSQL en Linux
7. Para conectarse a un servidor de base datos PostgreSQL se utiliza el
comando psql. Se le pueden pasar muchos parámetros a este comando de
la forma psql [OPTIONS]... [DBNAME [USERNAME]]. Para empezar, nos
conectamos al nuevo servidor que acabamos de crear, y una vez dentro, le
asignamos un password al usuario con privilegios de postgres:
[email protected]:~$ psql template1
Welcome to psql 8.0.4, the PostgreSQL interactive terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
template1=# ALTER USER postgres WITH ENCRYPTED PASSWORD 'secret';
ALTER USER
template1=# \q
‘template1’ es el nombre de una de las dos bases de datos que por defecto se
encuentran en el database cluster. Entre otras cosas, la base template1 se utiliza
cuando uno crea una base de datos nueva.
Para salir de la terminal de PostgreSQL se utiliza el comando \q .
12
Instalación de PostgreSQL en Linux
8. Si nos conectamos por segunda vez, vemos que no nos pide el password. Esto
se debe a que existe un archivo de configuración llamado ‘pg_hba.conf’ en el
que se determina quién, cómo y a qué, se puede acceder de nuestro servidor
de BD, y por defecto está definido de forma que se aceptan todas las
conexiones locales sin necesidad de password.
Si por ejemplo, sólo queremos aceptar conexiones locales y del host con IP
192.168.1.68 ( donde se hospedaría el servidor web y la aplicación PHP que
realiza las conexiones con el servidor de BD), y además usar encriptación MD5
en la autenticación…, el archivo pg_hba.conf contendría las siguientes líneas:
# TYPE
local
host
host
DATABASE
all
all
all
USER
all
all
all
CIDR-ADDRESS
192.168.1.68
0.0.0.0
255.255.255.255
0.0.0.0
METHOD
md5
md5
reject
13
Instalación de PostgreSQL en Linux
Tras cualquier cambio de configuración, es preciso reiniciar el servidor DB.
Podemos especificar al mismo tiempo el nombre del archivo en el que
guardará la bitácora (log). El nombre del archivo se lo pasamos como
parámetro al comando pg_ctl (por ejemplo log_2006-03-09):
[email protected]:~$ pg_ctl stop
LOG: received smart shutdown request
LOG: shutting down
waiting for postmaster to shut down....LOG: database system is shut down done
postmaster stopped
[email protected]:~$ pg_ctl start -l log_2006-03-09
postmaster starting
14
Instalación de PostgreSQL en Linux
9.
Otro archivo de configuración importante es ‘postgresql.conf’.
En este archivo se puede configurar el puerto por el que escuchará el
servidor, el número máximo de conexiones que permitirá, el uso de los
recursos de sistema, las bitácoras, etc.
Los parámetros comentados tienen valores por defecto. Para cambiarlos,
solo hay que descomentar la línea y asignar el valor deseado. Sin olvidar
reiniciar posteriormente.
Para las versiones 7.x de PostgreSQL, si se desea aceptar conexiones
TCP/IP, se tiene que especificar en este archivo la línea tcpip_socket =
true.
15
Instalación de PostgreSQL en Linux
10. Para conectarse desde otro host a nuestro servidorDB, éste ha de tener
instalado el cliente de PostgreSQL.
Supongamos que la dirección IP del servidorDB al que queremos acceder
es 192.168.1.67.
Para conectarnos a la base de datos ‘BDphp’ del servidorDB, mediante el
usuario de postgress ‘cris’ desde el host cliente, basta con ejecutar la
instrucción:
[email protected]:~$ psql -h 192.168.1.67 BDphp cris
En lugar de especificar la IP, también se puede utilizar el nombre de
dominio del servidor.
16
Comentarios
• Para los que les guste trabajar más con interfaz gráfica y no desde shell,
existe ‘pgadmin’, es como una mezcla entre el Enterprise Manager y el
Query Analyzer de MS SQL Server. http://www.pgadmin.org/
• También se dispone de la aplicación ‘phpPgAdmin’, que es muy similar en
funcionalidad a phpMyAdmin.
• Para realizar conexiones utilizando ODBC, existe ‘psqlODBC’.
17
Creación de una tabla con PostgreSQL
• Una vez creada la base de datos, se pueden crear las tablas que la
componen de la siguiente manera:
CREATE TABLE nombre_tabla (
nombre_columna tipo_columna [ cláusula_defecto ] [ vínculos_de_columna ]
[ , nombre_columna tipo_columna [ cláusula_defecto ] [ vínculos_de_columna ]... ]
[ , [ vínculo_de tabla] ... ] )
Nombre_columna: es el nombre de la columna que compone la tabla.
Hay que tener en cuenta que la longitud de los identificadores de
columna no debe tener más de 18 caracteres.
18
Creación de una tabla con PostgreSQL
•
Tipo_columna: es la indicación del tipo de dato que la columna podrá
contener.
•
Los principales tipos son:
1.
CHARACTER(n) -> cadena de longitud fija con exactamente n caracteres
2.
CHARACTER VARYING(n) -> cadena de longitud variable con un máximo de n caracteres
3.
INTEGER -> Un número entero con signo.
4.
SMALLINT -> Un número entero con signo y una precisión que no sea superior a INTEGER.
5.
FLOAT(p) ->Un número con coma móvil y una precisión p
6.
DECIMAL(p,q)-> Un número con coma fija de por lo menos p cifras y signo.
7.
INTERVAL->Un periodo de tiempo
8.
DATE, TIME y TIMESTAMP -> Un instante temporal preciso
19
Creación de una tabla con PostgreSQL
•
Cláusula_defecto: indica el valor por defecto que tomará la columna si
no se le asigna uno en el momento en que se crea la línea.
•
Vínculos_de_columna: son vínculos de integridad que se aplican a cada
columna en concreto.
1. NOT NULL indica que la columna no puede tomar el valor NULL.
2. PRIMARY KEY indica que la columna es la llave primaria de la
tabla.
•
Vínculo_de_tabla: son vínculos de integridad que se pueden referir a
más columnas de la tabla
20
Creación de una tabla con PostgreSQL
A continuación, mostramos como crear una tabla de dos columnas llamada
ejemplo:
CREATE TABLE Ejemplo (
ID INTEGER PRIMARY KEY,
=> ID indica la llave primaria de la relación de tipo INTEGER.
type CHAR(18) NOT NULL
=> Es un atributo donde hay un vínculo de no nulidad, es de tipo CHAR(18)
);
21
Inserción de datos en una tabla con
PostgreSQL
• Para añadir una linea nueva a una tabla utilizaremos INSERT:
INSERT INTO nombre_tabla [ ( lista_campos ) ] VALUES ( lista_valores )
Nombre_tabla es el nombre de la tabla donde hay que incluir la nueva línea.
Lista_campos son los nombres de los campos a los que hay que asignar un
valor, separados entre sí por una coma. Los campos no incluidos en la lista
tomarán su valor por defecto o NULL.
Lista_valores valores que se asignaran a los campos de la tabla en el orden y
número especificados.
22
Inserción de datos en una tabla con
PostgreSQL
• Aqui, mostramos dos ejemplos de inserción en dos tablas distintas:
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
INSERT INTO
Persona VALUES ( 1, 'Agosti', 'Maristella' );
Persona VALUES ( 2, 'Benfante', 'Lucio' );
Persona VALUES ( 3, 'Melucci', 'Massimo' );
Persona VALUES ( 4, 'Spaccapietra', 'S.' );
Persona VALUES ( 5, 'Maryansky', 'F.' );
INSERT INTO Autor VALUES ( 2, 1 );
INSERT INTO Autor VALUES ( 2, 2 );
INSERT INTO Autor VALUES ( 2, 3 );
23
Extracción de datos de una tabla.
• Las instrucciones que utilizamos para extraer datos de las tablas son:
SELECT [ ALL | DISTINCT ] lista_elementos_selección
FROM lista_referencias_tabla
[ WHERE expresión_condicional ]
[ GROUP BY lista_columnas ]
[ HAVING expresión_condicional ]
[ ORDER BY lista_columnas ]
Para comprender mejor el funcionamiento anterior, lo que haremos será
aplicar la función anterior en unas tablas.
24
Extracción de datos de una tabla.
En este primer ejemplo, lo que se hace es extraer de una tabla llamada
apellidos
Personas los apellidos y ordenarlos alfabéticamente.
Caso 1:
SELECT apellidos FROM Personas ORDER BY apellidos
---------------------------Agosti
Batini
Bayer
Benfante
Carey
Cochowsky
DeWitt
Kim
Knuth
La opción DISTINCT sirve para diferencia los casos donde nos encontremos con
dos apellidos iguales. De esta manera no habrán problemas de líneas
duplicadas.
SELECT DISTINCT apellidos FROM Personas ORDER BY apellidos
25
• En este ejemplo, utilizando la tabla Personas, creamos una nueva que
contiene solo los apellidos que empiezan por ‘B’.
SELECT * FROM Personas WHERE apellidos LIKE 'B%‘
El comparador LIKE permite una comparación de caracteres.
La nueva tabla es como la siguiente:
• Otro ejemplo sencillo es éste, lo único que hace es contar el número de
líneas que tiene la tabla llamada Publicación.
SELECT COUNT(*) FROM Publicacion
count
----12
26
Algunas instrucciones útiles:
• MODIFICAR GRUPO — Instrucción para añadir usuarios o eliminarlos de un grupo.
MODIFICAR GRUPO nombre AÑADIR USUARIO nombre de usuario [, ... ]
MODIFICAR GRUPO nombre
ELIMINAR USUARIO nombre de usuario [, ... ]
• MODIFICAR TABLA — Modificar una tabla.
MODIFICAR TABLA tabla [ * ] AÑADIR [ COLUMNA ] columna tipo MODIFICAR TABLA tabla [ * ]
MODIFICAR [ COLUMNA ] columna { SET DEFAULT valor | DROP DEFAULT } MODIFICAR TABLA tabla
[* ] RENOMBRAR [ COLUMNA ] columna A nueva columna MODIFICAR TABLA tabla RENOMBRAR A nueva
tabla
• MODIFICAR USUARIO — Modificar la información de la cuenta de un usuario
MODIFICAR USUARIO nombre de usuario [ WITH PASSWORD 'palabra clave'
NOCREATEDB ] [ CREATEUSER | NOCREATEUSER ] [ VALID UNTIL 'abstime' ]
]
[
CREATEDB
|
• CREATE GROUP — Crea un grupo nuevo
CREATE GROUP name [ WITH [ SYSID gid ] [ USER username [, ...] ] ]
• CREAR USUARIO — La utilizamos para crear un nuevo usuario en la BD.
CREAR USUARIO nombre de usuario [ CON [ SYSID uid ] [ PASSWORD 'palabra clave' ] ]
[CREARDB | NOCREARDB ] [ CREARUSUARIO | NOCREARUSUARIO ] [ EN EL GRUPO nombre de grupo
[,...] ] [ VALIDO HASTA 'abstime' ]
27
Algunas instrucciones útiles:
• DELETE — Para borrar una fila de una tabla
DELETE FROM table [ WHERE condition ]
• DROP DATABASE — Instrucción para eliminar una base de datos existente
DROP DATABASE name
• DROP GROUP — Para eliminar un grupo
DROP GROUP name
• GRANT — Otorga privilegios de acceso a un usuario, a un grupo o a todos
los usuarios
GRANT privilege [, ...] ON object [, ...] TO { PUBLIC | GROUP group | username }
• INSERT — Inserta filas nuevas en una tabla
INSERT INTO table [ ( column [, ...] ) ] { VALUES ( expression [, ...] ) | SELECT
query }
28
Algunas instrucciones útiles:
• ROLLBACK — Interrumpe la transacción en curso
ROLLBACK [ WORK | TRANSACTION ]
• TRUNCATE — Vacía una tabla
TRUNCATE [ TABLA ] NOMBRE
• UPDATE — Substituye los valores de una columna en la tabla
UPDATE tabla SET columna = expresión [, ...] [ FROM lista ] [ WHERE condición ]
• VACUUM — Limpia y analiza una base de datos Postgres
VACUUM [ VERBOSE ] [ ANALYZE ] [ tabla ] VACUUM [ VERBOSE ] ANALYZE [ tabla [
(columna [, ...] ) ] ]
Podemos encontrar mas instrucciones en la siguiente dirección URL:
http://es.tldp.org/Postgresql-es/web/navegable/user/user.html
29
MySQL
30
Instalación de MySQL en Windows XP
1.
Descargar Mysql (4 o 5) de http://www.mysql.com/.
2.
Descomprimir el ‘.zip’ y ejectuar Setup.exe:
El instalador es un asistente InstallShield convencional.
31
Instalación de MySQL en Windows XP
El directorio de instalación predeterminado será C:\mysql, podéis cambiarlo una
vez instalado pero con algunos pasos adicionales (temas de path en my.ini) para
asegurar que todo funciona.
32
Instalación de MySQL en Windows XP
• En la configuración de NT/2000/XP el nombre del servidor es ‘mysqld-nt’ y
normalmente se instala como servicio (se ejecuta de fondo,
automáticamente al encender el equipo, para dar servicio a otros
programas):
cd c:\mysql\bin
Mysql-nt –install
Service successfully installed
• Se puede iniciar y detener el servicio MySQL desde la línea de comandos
con:
NET START mysql
NET STOP mysql o mysqladmin shutdown
• Para probar si MySQL funciona o no, ejectar:
C:/mysql/bin/mysqlshow
33
Aspectos de configuración MySQL
• Configurar la ruta para poder usar las utilidades de línea de comandos:
Inicio -> Configuración -> Panel de control -> Sistema -> Operaciones avanzadas -> Variables de
entorno: pulsar dos veces sobre PATH añadid ‘;’ a la ruta actual y detrás escribid ‘c:\mysql\bin ->
Aceptar.
Al reiniciar el equipo accederemos a MySQL sólo escribiendo ‘mysql’
• Eliminar el usuario anónimo. La configuración predeterminada de MySQL
permite que cualquier usuario acceda al sistema sin proporcionar user o
password. Debe borrarse el usuario anónimo. Abrid una línea de comandos e
introducid:
C:\mysql\bin\mysql
use mysql
delete from user where User=‘’;
quit;
C:\mysql\bin\mysqladmin reload
• Definir la contraseña raíz. La cuenta de superusuario todavía no tiene
contraseña. Configuradla:
C:\mysql\bin\mysqladmin –u root password tu_password
C:\mysql\bin\mysqladmin –u root –h nombre_host password tu_password
A partir de ahora para cualquier instrucción deberéis indicar el user y os pedirá el password :
C:\mysql\bin\mysqladmin –u root –p reload
(luego os pide el password)
34
Aspectos de configuración MySQL
• En el archivo de configuración de MySQL se indica la ubicación de los
archivos de cabecera, las bibliotecas de MySQL y otras preferencias para
nuestro sistema en particular. Según cómo, será necesario que modifiquéis
algún parámetro de este archivo.
• Por ejemplo: hay que tener en cuenta que el número de conexiones
simultáneas a MySQL es limitado, para rechazar las solicitudes de nueva
conexión en momentos de mucho tráfico y evitar el uso de todos los
recursos del equipo. Para determinar este parámetro hay que modificar:
‘MaxClients’ en ‘httpd.conf’ de Apache
‘max_connections’ en ‘my.conf’ de MySQL.(o my.cnf o my.cfg )
35
Instrucciones básicas de manipulación
de tablas
•
Añadir datos:
INSERT [INTO] tabla [(columna1, columna2, columna3, …)] VALUES (valor1, valor2, valor3, …);
•
Recuperar datos:
SELECT [opciones] elementos
[INTO detalles_archivo]
FROM tablas
[WHERE condiciones] -> con criterios específicos
[GROUP BY tipo_grupo] -> desde varias tablas
[HAVING definición_de_dónde]
[ORDER BY tipo_orden]
-> con un orden dado (alfabeticamente según nombre)
[LIMIT criterios_límite] -> especificar fílas que deberían devolverse
[PROCEDURE nombre_proced (argumentos)]
[opciones_bloqueo];
• Actualizar registros:
UPDATE [LOW_PRIORITY] [IGNORE] nombretabla
SET columna1=expresión1 ,columna2=expresión2 ,…
[WHERE condición]
[ORDER BY criterios_de_orden]
[LIMIT número]
36
Instrucciones básicas de manipulación
de tablas
• Eliminar registros de la base de datos
DELETE
[WHERE
[ORDER
[LIMIT
[LOW_PRIORITY] [QUIK] [IGNORE] FROM tabla
condición] [LIMIT número]
BY orden_columnas]
número]
• Eliminar tabla
DROP TABLE nombre_tabla;
• Eliminar base de datos
DROP DATABASE nombre_db;
•Para más información consultar http://www.ansi.org o http://www.mysql.com.
37
EJEMPLO DE CREACIÓN DE UNA BASE DE DATOS SENCILLA
Not null -> todas las filas de la tabla deben contener un valor
Auto-increment -> al dejar el campo en blanco al insertar filas genera automáticamente un valor
de identificación exclusivo (una unidad mayor que el valor máximo incluido en la columna).
Primary key -> la columna se tratará como la clave principal de la tabla.
38
39
EJEMPLO DE CONSULTA A LA
BASE DE DATOS DESDE LA WEB CON PHP
• Los pasos básicos de una secuencia de comandos para
acceder a una base de datos desde la Web son:
1. Comprobar y filtrar los datos procedentes del usuario.
2. Configurar una conexión a la BD pertinente.
3. Consultar la base de datos.
4. Recuperar los resultados.
5. Presentar los resultados al usuario.
40
1. Comprobar y filtrar los datos entrantes.
Es necesario asegurase de que los parámetros introducidos por el usuario, que
vamos a pasar a la BD, estén en el formato adecuado para que sean
interpretados correctamente. Por ello, deberemos:
a)
Eliminar los espacios en blanco que pudiera haber introducido el usuario, al principio o
al final del término, mediante la función trim():
$searchterm= trim($searchterm);
b)
Verificar que el usuario ha introducido todos los términos necesarios:
if (!$searchtype || !$searchterm){
mensaje de error y abortar}
c)
Comprobar si está activa la función que añade comillas automáticamente o
no,’get_magic_quotes_gpc()’. (Cuando se pasa una $variable
como
parámetro se hace entre comillas, no obtendríamos el resultado deseado si la variable
no tuviera o tuviera doble comillas.)
41
2. Configurar una conexión
•
La librería ‘mysqli’ de PHP5 permite usar una sintaxis orientada a objetos o
procedimientos para conectarse a la BD de MySQL. Explicaremos el método basado en
procedimientos cuya sintaxis es más parecida a la usada por las otras versiones de php.
•
Establecimiento de la conexión con el servidor MySQL:
@ $db=mysqli_connect(‘nombre_host’,’user’,’password’,’nombre_BD’);
Esta función devuelve un puntero que representa la conexión a la base de datos. El operador de
supresión de errores [email protected] al inicio de la instrucción sirve para tratarlos con ‘elegancia’.
Hemos especificado la BD a usar, pasando su nombre como parámetro a la función
‘mysqli_connect()’. Podríamos, más adelante, cambiar de base de datos predeterminada con la
función:
mysqli_select_db($db,’nombre_bd’)
•
Comprobar el intento de conexión:
if (mysqli_connect_errno()){ mensaje de error y abortar}
La función usada en la condición retorna ‘0’ si no se da error o el ‘nº de error’ correspondiente en
caso contrario.
42
3. Consultar la base de datos
•
Para empezar se configura la consulta deseada:
$query=“ select * from books where “.$searchtype.” like '% “.$searchterm.” %’”;
=> Buscar, en la BD ‘books’, el valor introducido por el usuario ‘$searchterm’ en el campo
escogido por el mismo ‘$searchtype’.
•
A continuación ejecutamos la consulta pasando como parámetros, la variable $query
que la contiene, y el link de la BD:
$result = mysqli_query($db, $query);
Esta función, devuelve un identificador de resultado que es almacenado en la variable $result para
ser usado más adelante. En caso de fallo, la función devuelve false.
43
4. Recuperar resultados de consulta
Existe un conjunto de funciones para dividir los resultados del identificador de resultados de
varias formas. El identificador de resultados es la clave para acceder a las filas devueltas por
la consulta.
•
Si queremos obtener el número de filas devueltas por la consulta, basta con ejecutar la siguiente función:
$num_results = mysqli_num_rows($result);
•
Además podemos obtener el valor de los diferentes campos de cada fila usando la función:
$row = mysqli_fetch_assoc($result);
Esta función toma cada fila del conjunto de resultados y devuelve la fila como matriz, con cada clave
en forma de nombre de atributo y cada valor con su valor correspondiente en la matriz. Para acceder
al campo y mostrarlo usamos:
echo stripslashes($row[‘author’]);
También se puede usar otra función que retorna una matriz enumerada en lugar de con claves con nombre:
mysqli_fetch_row($result);
Los valores de atributo se enumerarán en cada uno de los valores de matriz $row[0], $row[1], etc.
44
5. Desconectar de la base de datos
•
Para liberar el conjunto de resultados:
mysqli_free_result($result) ;
•
Para cerrar la conexión de BD:
mysqli_close($db) ;
Estos pasos no resultan imprescindibles ya que se cierran de todos modos cuando
una secuencia de comandos finaliza su ejecución, pero siempre es recomendable
hacerlo.
45
EJEMPLO DE INSERCIÓN DE NUEVA
INFORMACIÓN A LA BASE DE DATOS DESDE
LA WEB CON PHP
• La inserción de nuevos elementos en una base es similar al caso
anterior:
– Establecimiento de conexión
– Envío de ‘consulta’
– Comprobación resultados
Simplemente se usa INSERT en vez de SELECT, en la consulta.
Veamos un ejemplo en el que insertaremos un nuevo libro a la
base de datos.
46
Puntos a destacar
• Es aconsejable comprobar que todos los campos del formulario se
han rellenado.
• También la aplicación del formato correcto para su inserción en la
BD, mediante la función addslashes().
• El precio es una variable flotante, hay que filtrar todos los
caracteres extraños (y símbolos de moneda) que pudieran
introducirse en este campo, mediante ‘doubleval()’.
• Con la instrucción SELECT se usa la función mysqli_num_rows()
para obtener el nº de filas que devuelve. Con INSERT,DELETE y
UPDATE hay que usar mysqli_affected_rows().
47
Descargar

Diapositiva 1 - CRISES / URV