:::: MENU ::::

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.

// incluimos la conexión
require("conexion.php");
// creamos la consulta
$query = "SELECT * FROM empresa ORDER BY nombre ASC";
// enviamos la consulta a MySQL
$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.

require("conexion.php");
$query = "SELECT * FROM empresa ORDER BY nombre ASC";
$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:

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

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

<ul>
<?php while ($rsEmp = mysql_fetch_assoc($quEmp)) { ?>
<li><?php echo $rsEmp['nombre']; ?></li>
<?php } ?>
</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.

<table>
  <tr>
    <th>Nombre</th>
    <th>Dirección</th>
    <th>Teléfono</th>
  </tr>
  <?php while ($rsEmp = mysql_fetch_assoc($quEmp)) { ?>
  <tr>
    <td><?php echo $rsEmp['nombre']; ?></td>
    <td><?php echo $rsEmp['direccion']; ?></td>
    <td><?php echo $rsEmp['telefono']; ?></td>
  </tr>
  <?php } ?>
</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.

<form id="frbuscar" method="get" action="">
    <input name="criterio" id="criterio" type="text" />
    <input type="submit" id="btbuscar" value="Buscar" />
</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.

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.

require("conexion.php");
require("funciones.php");

$criterio = getParam($_GET["criterio"], "");
$total = 0;
if ($criterio != "") {
	$slike = sqlValue($criterio."%", "text");
	$query = "SELECT * FROM empresa WHERE nombre like ".$slike." ORDER BY nombre ASC";
	$queEmp = mysql_query($query, $conexion);
	$total = mysql_num_rows($queEmp);
}

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
require("conexion.php");
require("funciones.php");

$criterio = getParam($_GET["criterio"], "");
$total = 0;
if ($criterio != "") {
	$slike = sqlValue($criterio."%", "text");
	$query = "SELECT * FROM empresa WHERE nombre like ".$slike." ORDER BY nombre ASC";
	$queEmp = mysql_query($query, $conexion);
	$total = mysql_num_rows($queEmp);
}
?>
<html>
<head>
<title>Consultar datos en MySQL</title>
</head>
<body>
<h3>Buscador de  Empresas</h3>
<form id="frbuscar" method="get" action="">
    <input name="criterio" id="criterio" type="text" />
    <input type="submit" id="btbuscar" value="Buscar" />
</form>
<?php if ($total > 0) { ?>
<em>Total de Resultados: <?php echo $total; ?></em>
<table>
  <tr>
    <th>Nombre</th>
    <th>Dirección</th>
    <th>Teléfono</th>
  </tr>
  <?php while ($rsEmp = mysql_fetch_assoc($quEmp)) { ?>
  <tr>
    <td><?php echo $rsEmp['nombre']; ?></td>
    <td><?php echo $rsEmp['direccion']; ?></td>
    <td><?php echo $rsEmp['telefono']; ?></td>
  </tr>
  <?php } ?>
</table>
<?php } ?>
<p>&nbsp;</p>
</body>
</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.


24 Comentarios

  • Josepex |

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

  • Jesus |

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

  • luis |

    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 |

    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);

  • leon |

    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/:…

  • unijimpe |

    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 |

    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 |

    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 |

    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 |

    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 |

    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)

  • Arturo |

    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 |

    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 |

    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 |

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

  • Julian |

    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 |

    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 |

    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?

  • luis uribe |

    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

Publica tu comentario

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;.