Notice: article only available in Spanish!
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'] . '
' ;
}
}
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'] . '
' ;
}
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 to connect to a database and read tables
* @author Jorge Albaladejo Pomares [correo@jorgealbaladejo.com]
* @license Creative Commons License http://creativecommons.org/licenses/by-sa/3.0/
*/
//variables
$host = "localhost";
$user = "john_smith";
$pass = "h01y_GRail";
$db = "pastafarian_food";
//connection
$identifier = @mysql_connect ($host,$user,$pass);
if (!$identifier)
{
die("Error connecting to database: ".mysql_error());
}
//selecting the database
$db_selected = mysql_select_db ( $db, $identifier );
if (!$db_selected)
{
die ("Cannot select database: " . 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'] . '
' ;
}
}
//close connection
mysql_close($identifier);
Como vemos, el código queda un poco sucio, 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 to connect to a database and read from tables, organized with functions
* @author Jorge Albaladejo Pomares [correo@jorgealbaladejo.com]
* @license Creative Commons License http://creativecommons.org/licenses/by-sa/3.0/
*/
/**
* Connect to a database with default parameters
* @return the connection identifier
*/
function connect()
{
//variables
$host = "localhost";
$user = "john_smith";
$pass = "h01y_GRail";
$db = "pastafarian_food";
//
//connection
$identifier = @mysql_connect ($host,$user,$pass);
if (!$identifier)
{
die("Error connecting to database: ".mysql_error());
}
//selecting database
$db_selected = mysql_select_db ( $db, $identifier );
if (!$db_selected)
{
die ("Cannot select database: " . mysql_error());
}
return($identifier);
}
/**
* retrieves the selected fields from a certain table in a database
* @param table to retrieve from
* @param fields to retrieve
*/
function readTable($table,$fields,$identifier)
{
//variables
$resultsArray = array();
//fields
$fieldsList = "";
foreach($fields as $key=>$value)
{
$fieldsList .= $value . ",";
}
//remove last comma
$fieldsList = substr($fieldsList,0,strlen($fieldsList)-1);
//query
$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);
}
/**
* closes connection and frees resources
* @param identifier of the connection to close
*/
function disconnect($identifier)
{
//TODO: some routines to clean resources, data, variables, etc.
mysql_close($identifier);
}
/**
* 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] . "
";
}
echo "
";
}
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 como sigue:
/**
* script to connect to a database and read from tables, organized with functions
* @author Jorge Albaladejo Pomares [correo@jorgealbaladejo.com]
* @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] . "
";
}
echo "
";
}
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.