Interaccion Base de Datos
Interaccion Base de Datos
Interaccion Base de Datos
el servidor.
Php permite al programador tanto relacionarse con algunas de las bases de datos ms importantes del
mundo de la programacin:
PostgreSQL
MySql
Oracle
Adabas
filePro
ODBC
como con otros menos conocidos.
En particular, la conexin ODBC permite relacionarse con bases de datos tipo Access.
La utilizacin de las instrucciones para la conexin a las bases de datos no tiene nada que ver con el
conocimiento de los mismos. El lenguaje SQL sirve para formualr las preguntas y para saber el significado
de ndices, claves, relaciones, etc.
En resumidas cuentas, un webmaster que quiere organizar un sistema que prevea la consultacin de una
base de datos a travs del web, en la mayora de los casos tiene que conocer muy bien la estructura misma
de la base de datos, incluso el significado de los datos que hay en la misma.
Por lo que se refiere a SQL, el lenguaje estndar para hacer preguntas en las bases de datos, hay muchos
seminarios y manuales en la red. Lo nico que dir es que con la palabra pregunta o query nos referimos a
una serie de instrucciones que cualquier base de datos pone en marcha devolviendo una serie de tuple (en
general, lneas o partes de lneas de una o ms tablas de una base de datos).
En este seminario consideramos las operaciones en una base de datos de tipo MySQL y damos por
descontado el conocimiento de la misma base de datos. Al lector atento no le resultar difcil transformar las
operaciones explicadas para transladarlas a su base de datos preferida.
De modo prctico las operaciones Php en las bases de datos podran dividirse en tres niveles:
abrir/cerrar conexiones
enviar preguntas SQL
leer los resultados de una query
Las operaciones abrir/cerrar una conexin a una base de datos sirven para abrir/cerrar una conexin con la
base de datos elegida con el fin de hacer operaciones como leer/escribir y transmitir los datos en formato
html.
Para abrir/cerrar una conexin en MySql tenemos las instrucciones:
mysql_connect(host,login,password)
mysql_close()
Para mandar preguntas se puede utilizar la instruccin:
mysql_db_query(database,query,ID_database)
Para leer los resultados se usan unas instrucciones que veremos sucesivamente.
Una primera bsqueda
Para llevar a cabo nuestra primera bsqueda en la base de datos hgamoslo mediante el ejemplo: saber la
existencia, la configuracin y el significado del contenido de una tabla llamada Anuncios.
La tabla Anuncios incluye los campos:
ID [clave primaria]
Nombre [nombre del autor del anuncio]
Email [email]
Texto [texto del anuncio]
Una bsqueda dentro de la tabla podra hacerse con el siguiente cdigo:
<?
$db=mysql_connect("localhost","","") or die("Error en la conexin a MySql");
$result=mysql_db_query("base de datos_anuncios","SELECT * FROM Anuncios",$db);
mysql_close();
?>
Estas instrucciones permiten memorizar en la variable $result todos los anuncios que estn en la tabla
Anuncios.
Para escribirlos se necesita primero hacer la operacin:
$row=mysql_fetch_row($result);
y despus, la primera lnea del resultado estar disponible en la variable array $row. Para escribir el
resultado ser necesaria una lnea del tipo:
print($row[1]."/".$row[2]."/".$row[3]."/".$row[4]."/");
Para saber el nmero de lneas del resultado de una pregunta basta con usar la instruccin:
$num_rows=mysql_num_rows($result);
Otra operacin muy til es la que devuelve el nmero de campos en el grupo de resultados de la pregunta
que se acaba de hacer:
$num=mysql_num_fields($result);
Llegados a este punto estamos listos para formular preguntas ms complejas. Por ejemplo, despus de
haber creado un form que devuelva en la variable $cadena una palabra que hay que buscar, se puede
escribir:
$sql="SELECT * FROM Anuncios WHERE Texto LIKE '%".$cadena."%'"
$result=mysql_db_query("db_anuncios",$sql,$db);
$result estar compuesto por todos los anuncios que incluyen la palabra memorizada en $cadena.
Un sitio de anuncios
Al final de la ltima leccin veamos la construccin de una base de datos de anuncios y su posible consulta
a travs de las pginas web.
Ahora vamos a ver cmo solucionar el problema y cmo construir un sitio que permita tanto la introduccin
como la bsqueda.
La tabla Anuncios que memoriza los anuncios se ha descrito e incluye los campos:
ID [clave primaria]
Nombre [nombre del autor del anuncio]
Email [email]
Texto [texto del anuncio]
Pasemos a la prctica no olvidando que el instrumento necesario para enviar datos de un archivo html/php3
a otro es el form, como hemos descrito en las lecciones anteriores.
Para que funcione todo vamos a crear unos archivos:
show.php3 [mostrar los anuncios]
insert.php3 [introducir un anuncio]
search.php3 [buscar una o ms palabras en la base de datos]
Como interactuar con una base de datos MySQL usando PHP
1 . Tabla de usuarios
2 . Cdigo PHP
Existe una variedad de lenguajes de script y motores de bases de datos, pero a una de las mejores alternativas en
cuanto a costo y velocidad la conforman PHP y MySQL. Adems de ser extremadamente rpido, utilizo este sistema de
base de datos para mis sitios por estar bien documentado. Con solo pocas lneas de cdigo PHP se pueden administrar
datos guardados en una base MySQL, agregando, eliminando o actualizando campos y registros.
Para comenzar con los ejemplos de este artculo debemos crear una nueva base de datos. Esto se puede hacer de
diferentes maneras, ya que existen distintos programas para administrar bases de datos, como el conocido
phpMyAdmin; otra forma es desde la lnea de comandos del Server haciendo un Telnet.
En este ejemplo asumo que tienes instalado y configurado phpMyAdmin adecuadamente para manejar bases y tablas. La
mayora de ISP y proveedores de hosting ofrecen este servicio ya instalado para los clientes. Siguiendo las instrucciones
del PhpMyAdmin fcilmente podras crear la base que utilizaremos para los ejemplos, el nombre de la base
ser ejemplo.
Tabla de usuarios
Con la primera base creada pasamos a construir la tabla usuarios que estar compuesta como se muestra a
continuacin en la tabla:
Campo Tipo
id
Entero
Autonumerico
Valor Default 0
Clave principal
nombre Varchar 50
apellido Varchar 50
dni Entero
Las propiedades de los campos se configuran en phpMyAdmin al crear la tabla. Con la base y la tabla creada
adecuadamente podemos pasar a escribir cdigo PHP.
Cdigo PHP
A continuacin crearemos cinco scripts que se encargaran de realizar las funciones bsicas sobre una base de datos
MySQL, estos archivos
sern: conexion.php, cerrar_conexion.php,guardar.php, ver.php y actualizar.php.
Como primer paso crearemos la conexin con el MySQL, el script correspondiente seraconexin.php, el cual estar
incluido utilizando la funcion include (nombre_archivo) de PHP, en todos los dems scripts del sitio que
trabajen con la base de datos para establecer la conexin ahorrando lneas de cdigo. Sin una conexin establecida no
se podr trabajar con la base de datos.
En el archivo conexin.php deben ser configuradas un par de variables correspondientes a nuestro servidor: el host,
usuario y password para acceder al MySQL, adems indicar que base se utilizara en la conexin.
Entonces podemos abrir el bloc de notas, escribir las siguientes lneas de cdigo y guardarlas con el
nombre conexin.php:
Archivo conexion.php
<?
$dbhost="localhost"; // host del MySQL (generalmente localhost)
$dbusuario="agustin"; // aqui debes ingresar el nombre de usuario
// para acceder a la base
$dbpassword="mipass"; // password de acceso para el usuario de la
// linea anterior
$db="ejemplo"; // Seleccionamos la base con la cual trabajar
$conexion = mysql_connect($dbhost, $dbusuario, $dbpassword);
mysql_select_db($db, $conexion);
?>
Con este archivo creado podemos empezar a trabajar con la base desde nuestros siguientesscripts.
Seria correcto cerrar la conexin abierta al terminar de trabajar con la base, para ello creamos un nuevo archivo con
solamente una lnea de cdigo:
Archivo cerrar_conexion.php
<? mysql_close($conexion); ?>
Esta lnea cierra la conexin con el motor MySQL abierta en el archivo conexion.php, este archivo ser incluido en el
final de todos los scripts siguientes.
Es el turno ahora del archivo guardar.php que se encargara de insertar registros en la base mostrando un formulario
mediante el cual el usuario ingresara los nuevos datos. Entonces creamos un nuevo documento de texto con el siguiente
contenido:
Archivo guardar.php
<?
include "conexion.php";
if (!isset($accion)){
echo"
<html>
<head><title>Guardar datos en la base</title></head>
<body>
<h3>Guardar datos en la base</h3>
<form name="form1" method="post"
action="guardar.php?accion=guardar">
<p>Nombre:<br>
<input type="text" name="nombre">
</p>
<p>Apellido:<br>
<input type="text" name="apellido">
</p>
<p>DNI:<br>
<input type="text" name="dni">
</p>
<p>
<input type="submit" name="Submit" value="Guardar Datos">
</p>
</form>
</body>
</html>";
}elseif($accion=="guardar"){
include"conexion.php";
$result=mysql_query("INSERT INTO usuarios (id,nombre, apellido, dni)
VALUES ('',$nombre,$apellido,$dni) ",$conexion);
echo" <html>
<head></head>
<body>
<h3>Los datos han sido guardados</h3>
</body>
</html>";
}
include "cerrar_conexion.php";
?>
Claro est que se omitieron muchas lneas de cdigo destinadas a chequear que los datos ingresados por el usuario
fueron correctos y solamente nos limitamos a guardar los datos en la base.
El script que escribiremos a continuacin toma los datos de la base y mediante una iteracin forma una tabla en la cual
se representara la lista de datos ordenada por el campo nombre.
Archivo ver.php
<?
include "conexion.php";
$result=mysql_query("SELECT * FROM usuarios ORDER BY nombre",
$conexion);
echo"<table width=300>
<tr>
<td><b>Nombre</b></td><td><b>Apellido</b></td><td><b>DNI</b></td>
</tr>";
while($row=mysql_fetch_row($result)){
echo"<tr>
<td>$row[1]</td><td>$row[2]</td><td>$row[3]
<a href="actualizar.php?id=$row[0]">Actualizar</a></td>
</tr>";
}
echo"</table>";
include "cerrar_conexion.php";
?>
Con los archivos creados hasta ahora podemos guardar datos en la base y ver los registros guardados. Al formarse la
tabla con los resultados obtenidos de la base, notaremos que al lado de cada registro aparece un link llamado Actualizar,
el cual hace referencia al archivo que crearemos a continuacin. El link pasa como parmetro la variable id que
contiene el nmero correspondiente al campo autonumrico del registro que actualizaremos.
El archivo siguiente muestra un formulario con los datos que actualmente contiene la base en el lugar indicado por la
variable id, una vez llenado el formulario, el script actualiza la tabla de la base de datos con la nueva informacin
ingresada por el usuario.
Archivo actualizar.php
<?
include "conexion.php";
if (!isset($accion)){
$result=mysql_query("SELECT * FROM usuarios WHERE id=$id",
$conexion);
$row=mysql_fetch_row($result);
echo"<html>
<head><title>Actualizar datos de la base</title></head>
<body>
<form action="actualizar.php?accion=guardar" method="POST">
Nombre:<br>
<input type="text" value="$row[1]" name="nombre"><br>
Apellido:<br>
<input type="text" value="$row[2]" name="apellido"><br>
DNI:<br>
<input type="text" value="$row[3]" name="dni"><br>
<input type="hidden" name="id" value="$row[0]">
<input type="submit" value="Guardar">
</form>
</body>
</html>";
}elseif($accion==guardar){
$result=mysql_query("UPDATE usuarios SET nombre=$nombre,
apellido=$apellido, dni=$dni WHERE id = $id",$conexion);
echo"
<html>
<body>
<h3>Los registros han sido actualizados</h3>
</body>
</html>";
}
include "cerrar_conexion.php";
?>
Estos scripts muestran como rpidamente se puede administrar una base de datos on-line. He intentado en este artculo
mostrar la manera ms sencilla de hacerlo. Se puede agregar en cada archivo funciones para chequear que los datos
ingresados por el usuario son correctos, adems de mostrar diferentes errores en cada caso, pero eso queda en manos
de ustedes. El PHP trae incorporadas funciones para interactuar con distintos tipos de bases de datos, como Oracle, SQL
Server, y ms. Si alguien tiene crticas, o cualquier tipo de comentarios sobre este articulo, le agradezco que me los
haga llegar.
Lo que tienes que hacer es luego de haber definido las conexiones a las bases de datos, siempre que vayas a
hacer alguna llamada usando alguna funcin mysql,select_db, insert, select, update o delete, tienes que
poner al final el identificador de la conexin que ests usando.
Es decir, te quedara algo as.
Cdigo PHP:
$conexion1= mysql_connect('localhost','root','hoy')or die ('Ha fallado la conexi
ón: '.mysql_error());
mysql_select_db('documento', $conexion1)or die ('Error al seleccionar la Base de
Datos: '.mysql_error());
$conexion2= mysql_connect('localhost','root','xxx')or die ('Ha fallado la conexi
ón: '.mysql_error());
mysql_select_db('prueba', $conexion2)or die ('Error al seleccionar la Base de Da
tos: '.mysql_error());
y as sucesivamente.
Por ejemplo, cuando vas a hacer un select a una tabla nombre_tabla de la base de datos de prueba, tienes
que hacer as:
Cdigo PHP:
$result = mysql_select("select * from [B]nombre_tabla[/B] Where condicion", $con
exion2);
Dime si entiendes.
Lo acabo de probar con dos servidores y tablas diferentes y funciona perfectamente.
Saludos y espero poder ayudarte.