lectura de datos de una base de datos

Hora y Fecha: 19 de Mayo de 2007 a las 8:06 pm Autor: jorge albaladejo
Categorías:

Ya he explicado en otro post cómo conectar a una base de datos mysql desde php. Ahora voy a explicar cómo trabajar con esta base de datos, en concreto mostrar los datos de una tabla.

Parto de la premisa de que se ha aprendido a utilizar el script anteriormente citado para la conexión y selección de base de datos, y que se ha configurado correctamente para acceder a una BD donde existe la tabla ’superheroes’, con los campos ‘id’, ‘name’, ’special_powers’.

Vamos allá : leemos los datos de la tabla. Para ello, usamos la función php mysql_query(); para ejecutar código sql en el servidor de bases de datos. Vamos a leer los campos importantes (en este caso, los tres) de la tabla superheroes.

$query = "SELECT id, name, special_powers FROM superheroes";
$resultset = @mysql_query($query,$identifier);
if (@mysql_num_rows($resultset) > 0)
{
while ($result = mysql_fetch_array($resultset))
{
echo $result['id'] . ' | ' . $result['name'] . ' | ' . $result['special_powers'] . '<br />' ;
}
}

Una vez hemos leído los datos podemos inmediatamente mostrarlos por pantalla, o almacenarlos en una matriz asociativa para emplearlos más adelante. Por ejemplo, cambiando el código

while ($result = mysql_fetch_array($resultset))
{
echo $result['id'] . ' | ' . $result['name'] . ' | ' . $result['special_powers'] . '<br />' ;
}

por

$i = 0;
while ($result = mysql_fetch_array($resultset))
{
$resultsArray[$i] = $result ;
$i++;
}

de modo que más adelante podremos mostrar estos datos como mejor nos convenga.

Hay que tener en cuenta que el script de conexión a base de datos que ya vimos, abre y cierra la conexión en un mismo paso. Por tanto, ahora tendremos que integrarlo con la parte de lectura de datos que acabamos de ver. El código resultante quedará así:

/* script para conexión con base de datos y lectura de tablas
* @author Jorge Albaladejo Pomares [jorge@abc-webs.net]
* @license Creative Commons License http://creativecommons.org/licenses/by-sa/3.0/
*/
//
//variables
$host = "localhost";
$user = "john_smith";
$pass = "h01y_GRail";
$db = "pastafarian_food";
//
//conexion
$identifier = @mysql_connect ($host,$user,$pass);
if (!$identifier)
{
die("Error conectando a la base de datos: ".mysql_error());
}
//
//selección de base de datos
$db_selected = mysql_select_db ( $db, $identifier );
if (!$db_selected)
{
die ("No se puede usar la base de datos: " . mysql_error());
}
//
//
$query = "SELECT id, name, special_powers FROM superheroes";
$resultset = @mysql_query($query,$identifier);
if (@mysql_num_rows($resultset) > 0)
{
while ($result = mysql_fetch_array($resultset))
{
echo $result['id'] . ' | ' . $result['name'] . ' | ' . $result['special_powers'] . '<br />' ;
}
}
//
//
//cierro conexión
mysql_close($identifier);

Como vemos, el código queda un poco farragoso, así que lo vamos a organizar un poquito creando tres funciones: la primera, conectará con la base de datos, la segunda, leerá la tabla, y la tercera realizará la conexión. Vamos allá.

/* script para conexión con base de datos y lectura de tablas, organizado en funciones
* @author Jorge Albaladejo Pomares [jorge@abc-webs.net]
* @license Creative Commons License http://creativecommons.org/licenses/by-sa/3.0/
*/
//
//
/* conecta a la base de datos con unos parámetros por defecto
* @return el identificador de la conexión
*/
function connect()
{
//variables
$host = "localhost";
$user = "john_smith";
$pass = "h01y_GRail";
$db = "pastafarian_food";
//
//conexion
$identifier = @mysql_connect ($host,$user,$pass);
if (!$identifier)
{
die("Error conectando a la base de datos: ".mysql_error());
}
//
//selección de base de datos
$db_selected = mysql_select_db ( $db, $identifier );
if (!$db_selected)
{
die ("No se puede usar la base de datos: " . mysql_error());
}
return($identifier);
}
//
//
/* consulta los campos seleccionados de una tabla concreta de la base de datos
*@param table la tabla concreta
*@param fields los campos a consultar
*/
function readTable($table,$fields,$identifier)
{
//variables
$resultsArray = array();
//campos
$fieldsList = "";
foreach($fields as $key=>$value)
{
$fieldsList .= $value . ",";
}
//quitamos la última coma
$fieldsList = substr($fieldsList,0,strlen($fieldsList)-1);
//consulta
$query = "SELECT " . $fieldsList . " FROM " . $table;
$resultset = @mysql_query($query,$identifier);
if (@mysql_num_rows($resultset) > 0)
{
$i = 0;
while ($result = mysql_fetch_array($resultset))
{
$resultsArray[$i] = $result ;
$i++;
}
}
return($resultsArray);
}
//
//
/* cierra la conexión y libera los recursos
*@param identifier la conexión a cerrar
*/
function disconnect($identifier)
{
//aquí podríamos realizar una serie de rutinas de limpieza de variables, etc
mysql_close($identifier);
}
//
//
/* script principal */
$token = connect();
$fields = array('id', 'name', 'special_powers');
$results = readTable('superheroes',$fields,$token);
foreach($results as $result)
{
foreach($fields as $key)
{
echo $key . " => " . $result[$key] . "<br />";
}
echo "<br />";
}
disconnect($token);

Hecho esto, lo más práctico es almacenar las funciones que acabamos de crear en un archivo externo de librerías y funciones útiles, y así reducir al mínimo el tamaño de nuestro script. En este ejemplo, las funciones connect(), readTable() y disconnect() han sido movidas a un archivo llamado functions.php en el mismo directorio que el script principal. El código finalmente queda así:

/* script para conexión con base de datos y lectura de tablas, organizado en funciones
* @author Jorge Albaladejo Pomares [jorge@abc-webs.net]
* @license Creative Commons License http://creativecommons.org/licenses/by-sa/3.0/
*/
//
//main functions
include('functions.php');
//main script
$token = connect();
$fields = array('id', 'name', 'special_powers');
$results = readTable('superheroes',$fields,$token);
foreach($results as $result)
{
foreach($fields as $key)
{
echo $key . " => " . $result[$key] . "<br />";
}
echo "<br />";
}
disconnect($token);

Hay que tener en cuenta que este script puede ser inseguro si se le ataca con sql injection, de esto hablaré más adelante en otras publicaciones.




« Anterior post: conexión a una base de datos mysql | Próximo post: seguridad en scripts y aplicaciones php »

Deja tu comentario

Si tu comentario no aparece inmediatamente no te preocupes, los comentarios se moderan antes de publicarlos por problemas con los spammers. Cuando hayas enviado varios comentarios y seas una persona de confianza, tus comentarios aparecerán inmediatamente sin necesidad de moderación.