PHP con MySQL: Consultar datos en MySQL

Consultar o extraer datos es una de las tareas mas comunes al interactuar con bases de datos, de esta forma podemos extraer los datos previamente almacenados, por ejemplo para mostrar la lista de productos de una tienda online o también para un buscador de documentos o el login de usuarios.

Requerimientos

Antes de continuar, es necesario tener una conexión abierta a MySQL, para ello pueden leer Crear una conexión a MySQL y luego crear la base de datos de ejemplo con el siguiente Script SQL.

Extrayendo datos de MySQL

Para extraer datos utilizaremos la función mysql_query mediante la cual enviamos un consulta SQL. Entonce primero incluimos el archivo para crear la conexión e inmediatamente creamos la consulta para extraer todos los datos de las empresas en nuestra base de datos.

php
  1. // incluimos la conexión
  2. require("conexion.php");
  3. // creamos la consulta
  4. $query = "SELECT * FROM empresa ORDER BY nombre ASC";
  5. // enviamos la consulta a MySQL
  6. $queEmp = mysql_query($query, $conexion);

También se puede agregar una sentencia para mostrar si hay algún error en la conexión o consulta.

php
  1. require("conexion.php");
  2. $query = "SELECT * FROM empresa ORDER BY nombre ASC";
  3. $queEmp = mysql_query($query, $conexion) or die(mysql_error());

Mostrando los Datos

El siguiente paso es mostrar los datos extraídos en la consulta, para ello podemos utilizar mysql_fetch_assoc el cual devolverá un array asociativo con el siguiente registro devuelto por la consulta. Entonces para mostrar todos los registros devueltos por la consulta se tendría:

php
  1. while ($resEmp = mysql_fetch_assoc($queEmp)) {
  2.    echo $resEmp['nombre']."<br>";
  3. }

Donde se puede ver que para acceder a cada campo del registro lo hacemos como un array donde le pasamos el nombre del campo que deseamos acceder (En el ejemplo estamos mostrando todos los nombres de las empresas consultadas).

Ahora, solo depende como deseamos mostrar los datos para modificar nuestro script. Por ejemplo si deseamos mostrar los datos como una lista tendríamos

php
  1. <ul>
  2. <?php while ($rsEmp = mysql_fetch_assoc($quEmp)) { ?>
  3. <li><?php echo $rsEmp['nombre']; ?></li>
  4. <?php } ?>
  5. </ul>

Ahora también podríamos mostrar los resultados en una tabla o datagrid, para ello modificamos nuestro código donde utilizaremos una tabla para mostrar en varias columnas los datos consultados.

php
  1. <table>
  2.   <tr>
  3.     <th>Nombre</th>
  4.     <th>Dirección</th>
  5.     <th>Teléfono</th>
  6.   </tr>
  7.   <?php while ($rsEmp = mysql_fetch_assoc($quEmp)) { ?>
  8.   <tr>
  9.     <td><?php echo $rsEmp['nombre']; ?></td>
  10.     <td><?php echo $rsEmp['direccion']; ?></td>
  11.     <td><?php echo $rsEmp['telefono']; ?></td>
  12.   </tr>
  13.   <?php } ?>
  14. </table>

Crear un Buscador

Ahora, podríamos crear un buscador básico de empresas, para ello creamos un formulario para ingresar el criterio de búsqueda.

php
  1. <form id="frbuscar" method="get" action="">
  2.     <input name="criterio" id="criterio" type="text" />
  3.     <input type="submit" id="btbuscar" value="Buscar" />
  4. </form>

Antes de continuar decidimos el tipo de consulta SQL que vamos a utilizar, en nuestro caso la búsqueda será por las primeras letras del nombre, para ello utilizaremos la sentencia LIKE explicada en el artículo PHP con MySQL: Introducción a SQL.

sql
  1. SELECT * FROM empresa WHERE nombre LIKE 'A%'

Luego, una vez enviado el formulario procedemos a recuperar los datos para proceder a crear la consulta y enviarla a MySQL. Primero verificamos que se ha enviado un criterio de búsqueda luego creamos la consulta no sin antes normalizar los datos (para prevenir ataques de inyección SQL), esto lo hacemos con la función sqlValue que hemos creado en PHP con MySQL: Insertar datos en MySQL.

php
  1. require("conexion.php");
  2. require("funciones.php");
  3.  
  4. $criterio = getParam($_GET["criterio"], "");
  5. $total = 0;
  6. if ($criterio != "") {
  7.     $slike = sqlValue($criterio."%", "text");
  8.     $query = "SELECT * FROM empresa WHERE nombre like ".$slike." ORDER BY nombre ASC";
  9.     $queEmp = mysql_query($query, $conexion);
  10.     $total = mysql_num_rows($queEmp);
  11. }

Nótese que estamos utilizando una variable $total donde se almacena el total de resultados devueltos por la consulta. El total de resultados se obtiene con la función mysql_num_rows.

Finalmente mostramos los resultados al cliente, para ello verificamos que existan resultados en la consulta. Uniendo todos los elementos tendríamos:

php
  1. <?php
  2. require("conexion.php");
  3. require("funciones.php");
  4.  
  5. $criterio = getParam($_GET["criterio"], "");
  6. $total = 0;
  7. if ($criterio != "") {
  8.     $slike = sqlValue($criterio."%", "text");
  9.     $query = "SELECT * FROM empresa WHERE nombre like ".$slike." ORDER BY nombre ASC";
  10.     $queEmp = mysql_query($query, $conexion);
  11.     $total = mysql_num_rows($queEmp);
  12. }
  13. ?>
  14. <html>
  15. <head>
  16. <title>Consultar datos en MySQL</title>
  17. </head>
  18. <body>
  19. <h3>Buscador de  Empresas</h3>
  20. <form id="frbuscar" method="get" action="">
  21.     <input name="criterio" id="criterio" type="text" />
  22.     <input type="submit" id="btbuscar" value="Buscar" />
  23. </form>
  24. <?php if ($total > 0) { ?>
  25. <em>Total de Resultados: <?php echo $total; ?></em>
  26. <table>
  27.   <tr>
  28.     <th>Nombre</th>
  29.     <th>Dirección</th>
  30.     <th>Teléfono</th>
  31.   </tr>
  32.   <?php while ($rsEmp = mysql_fetch_assoc($quEmp)) { ?>
  33.   <tr>
  34.     <td><?php echo $rsEmp['nombre']; ?></td>
  35.     <td><?php echo $rsEmp['direccion']; ?></td>
  36.     <td><?php echo $rsEmp['telefono']; ?></td>
  37.   </tr>
  38.   <?php } ?>
  39. </table>
  40. <?php } ?>
  41. <p>&nbsp;</p>
  42. </body>
  43. </html>

Como pueden ver no es complicado hacer consultas a MySQL, solo debemos crear la cadena con la consulta SQL y luego enviarla utilizando la función mysql_query. Lo siguiente solo depende de como deseamos mostrar la información resultante de nuestra consulta.

Para finalizar les dejo los archivos fuente de los ejemplos desarrollados en este artículo para que puedan hacer sus pruebas, seguir experimentando y completar su aprendizaje.

Comentarios Total 24 comentarios



[...] This post was mentioned on Twitter by Adobe Flash, Flash Platform. Flash Platform said: PHP con MySQL: Consultar datos en MySQL http://bit.ly/g3dUv8 [...]

Josepex
Publicado: 03/02/2011 9:56 am

Hola Jim, intuyo que la función getParam() es para validad la existencia de un REQUEST tipo GET……saludos

Jesus
Publicado: 10/02/2011 7:34 am

Buenos dias Jim, no puedes hacer un tutorial de como hacer graficas estadisticas extrayendo datos de mysql? por favor, te lo agradeceria

luis
Publicado: 25/02/2011 11:05 pm

que tal
cuando ejecuto el select_demo2.php me muestra este error:
Notice: Undefined variable: quEmp in C:\wamp\www\ELBAZAR\select-demo2.php on line 23

y en el select_demo3.php este:
Notice: Undefined index: criterio in C:\wamp\www\ELBAZAR\select-demo3.php on line 5

quien me puede ayudar?

unijimpe
Publicado: 25/02/2011 11:20 pm

Luis, lo que pasa es que tienes tu PHP configurado para que te devuelva las alertas y notas (No son errores pero son sugerencias de desarrollo) en los servidores de desarrollo esto esta desactivado, es decir solo devuelve los mensajes de error.

Podrias hacer que solo muestre los errores y no las advertencias colocando el siguiente código en la primera línea del PHP.

error_reporting(E_ERROR);

Rodrigo González
Publicado: 20/03/2011 11:11 pm

mysql_connect (y familia) están obsoletas. Esto significa que ya no se harán mejoras por esa vía luego de MySQL 4.1.3. La comunidad PHP recomienda encarecidamente utilizar mysqli o PDO en su lugar.
http://www.php.net/manual/es/mysqli.overview.php

Saludos.

leon
Publicado: 21/04/2011 2:19 am

que tal … muy bueno aportes… oye al ejecutar los archivos me sale un error en la funcion getParam()… Fatal error: Call to undefined function getParam() in c/:…

karina
Publicado: 10/06/2011 7:07 am

disculpa soy nueva en esto y queria saber que hace el metodo getPAram

unijimpe
Publicado: 10/06/2011 12:11 pm

Karina la función getParam sirve para recoger los datos enviados, quitarle los apostrofes y si no existe asignar un valor por defecto.

function getParam($param, $default) {
$result = $default;
if (isset($param)) {
$result = (get_magic_quotes_gpc()) ? $param : addslashes($param);
}
return $result;
}

Entonces antes de usar una variable utilizamos esta función y asignamos el valor en el caso no exista la variable. Por ejemplo si recogemos una variable GET con el idioma, y si no esta presente la variable asignamos el idioma por defecto a “es”;

$lang = getParam($_GET['lang'], "es");

La función ya esta incluida en los archivos de descarga.

Encarna
Publicado: 04/07/2011 6:59 am

Estoy intentado aprender programación con php (te diré que no se nada de programación) y en principio paracen pequeños tuturiales muy bien explicaditos.
Muchas gracias por tu inestimable ayuda, bajaré algun tutrial más y empezaré a investigar.

FEgaYO
Publicado: 18/10/2011 8:55 am

Hola Unijimpe , falta la BD en este ejemplo verda xk presiento K la pide xk me marce error :( ..Si me pasas el codigo para la bd todo Bien Gracias K pase Buen dia . :D

fede
Publicado: 21/10/2011 10:12 am

Hola jim como le hago para correrlo esk me pide la BD y no biene en ese documento, ayudame a crearla o enviamela GRACIAS DE ANTE MANO …

Jesus
Publicado: 23/11/2011 1:24 pm

con respecto a lo que publico luis el 25/02/2011 11:05 pm dices que poniendo error_reporting(E_ERROR); se soluciona lo de las alertas y notas

mauricio
Publicado: 31/01/2012 2:39 am

hola amigo… hay un pequeñisimo error en el datagrid!!!!!!!!!!!!!

si ves dice $quEmp y NO FUNCIONA ya que debe ser “$queEmp” quedando de esta forma

corrige ese pequeño errorcito en el datagrid (es el ejemplo 2)

mauricio
Publicado: 31/01/2012 2:41 am


// así está en el ejemplo

//así debe ir para que funcione correctamente

Arturo
Publicado: 05/07/2012 4:05 pm

Hola saludos
mi cuestión es con la consulta WHERE
en mi consulta quiero saber cuantas filas hay que coincidan:

$hoydia=date(d);
$hoymes=date(m);
$hoyano=date(Y);

$dia=$row[dia];
$mes=$row[mes];

$sql=”SELECT * FROM arturo WHERE $dia=$hoydia and $mes=$hoymes ” ;

$resultado=mysql_query($sql) or die (mysql_error());
$num_resultados = mysql_num_rows($resultado) or die (mysql_error());
echo ‘$num_resultados’;

Este código me da error en la consulta. ¿qué esta mal?

Gracias

Arturo
Publicado: 05/07/2012 6:45 pm

Hola perdona que te haga otra consulta, pero tengo un problema:

$hoydia=date(d);
$hoymes=date(m);
$hoyano=date(Y);

$sql=”SELECT * FROM cumples WHERE dia = ‘$hoydia’, mes = ‘$hoymes’ ” ;
$resultado=mysql_query($sql) or die (mysql_error());
$num_resultados = mysql_num_rows($resultado) or die (mysql_error()); // numeros de resultados
echo ‘$num_resultados’;

Necesito que solo “seleccione” las filas (en la tabla cumples) que la columna dia coincia con el dia de hoy y que la columna mes coincida con el mes actual. Gracias de verdad desde siempre me has ayudado.

efren
Publicado: 26/09/2012 11:13 pm

disculpa el ciclo while donde lees la consulta de query y vas creando la fila y columna para la tabla no funciona lo puse en mi codigo para probarlo pero no me crea las filas y columna con la informacion de el query pq sera?

martin
Publicado: 14/11/2012 1:29 pm

una pregunta y si quiero hacer un buscador, y que ese buscador encuentre fechas de días como le puedo hacer

Julian
Publicado: 23/12/2012 7:13 pm

Hola muy bueno el ejemplo, y facil de implementar!!!!

ahora mi duda es, mi base de datos se hizo grande y no se como paginar este ejemplo.. es posible???

PD y hay forma de agregar el boton editar y agregar datos en una bventana del tipo fancybox??

Desde ya gracias!!

carlos
Publicado: 05/03/2013 6:37 am

estoy intentando que me salgan los datos de la base de datos en un php con tu codigo pero me aparece vacia, pongo el codigo;

PHP con MySQL: Consultar datos en MySQL

Listado de inscritos

Nombre
Apellidos
Email
Telefono
Empresa
Como nos ha conocido
Recibir info

No me da ningun error, pero no me carga nada, me puedes exar una mano? GRacias de antemano!

gerardo
Publicado: 17/03/2013 1:16 pm

y en el select_demo3.php este:
Notice: Undefined index: criterio in C:\wamp\www\ELBAZAR\select-demo3.php on line 5

quien me puede ayudar?

Mauro
Publicado: 16/07/2013 11:47 pm

Tengo un problema con esto
Warning: mysql_query() expects parameter 2 to be resource, null given in C:\wamp\xampp\htdocs\inicio.php on line 18
Mi email es martinezmauroandres@hotmail.com ayudame con esto porfavor

luis uribe
Publicado: 03/10/2013 10:53 am

amigo buenos dias sabes que hago todo exactamente como mencionas pero cuando me trae la busqueda solo me trae el primer registro de la tabla y yo quiero que me traiga unos valores que yo introduje por medio de un txtbox y los estoy pasando por post

 

Comentar

En este blog los comentarios están moderados, serán mostrados cuando el administrador los apruebe. Por favor, evita comentarios ofensivos u obscenos por que no serán aprobados.
Si deseas publicar código fuente debes hacerlo entre las etiquedas <code> y </code>, además debes reemplazar los carácteres < por &lt; y > por &gt;.

(Requerido)

(Requerido, no será publicado)

(Requerido)

(Tags aceptados: <a> <em> <strong> <code> <ul> <li>)