20 - Consulta (selección de registros de una tabla)

El proceso de consulta de datos de una tabla es similar al de listado, la diferencia es que se muestra sólo aquel o aquellos que cumplen la condición por la que buscamos.

Haremos un programa que nos permita consultar los datos de un alumno ingresando su mail para su búsqueda. Tengamos en cuenta que no puede haber dos alumnos con el mismo mail, por lo que la consulta nos puede arrojar uno o ningún registro.

Debemos codificar un formulario para el ingreso del mail a consultar:

pagina1.html
<html>
<head>
  <title>Problema</title>
</head>
<body>
  <form action="pagina2.php" method="post">
    Ingrese el mail del alumno a consultar:
    <input type="text" name="mail">
    <br>
    <input type="submit" value="buscar">
  </form>
</body>
</html> 

Por otro lado tenemos el archivo «pagina2.php» que se encarga de buscar el mail ingresado en el formulario:

pagina2.php
<html>
<head>
  <title>Problema</title>
</head>
<body>
  <?php
  $conexion = mysqli_connect("localhost", "root", "", "base1") or
    die("Problemas con la conexión");

  $registros = mysqli_query($conexion, "select codigo,nombre,codigocurso
                        from alumnos where mail='$_REQUEST[mail]'") or
    die("Problemas en el select:" . mysqli_error($conexion));

  if ($reg = mysqli_fetch_array($registros)) {
    echo "Nombre:" . $reg['nombre'] . "<br>";
    echo "Curso:";
    switch ($reg['codigocurso']) {
      case 1:
        echo "PHP";
        break;
      case 2:
        echo "ASP";
        break;
      case 3:
        echo "JSP";
        break;
    }
  } else {
    echo "No existe un alumno con ese mail.";
  }
  mysqli_close($conexion);
  ?>
</body>
</html> 

Lo más importante se encuentra en el comando select:

$registros = mysqli_query($conexion, "select codigo,nombre,codigocurso
                        from alumnos where mail='$_REQUEST[mail]'") or
    die("Problemas en el select:" . mysqli_error($conexion)); 

Acá es donde con la clausula where seleccionamos sólo el registro que cumple con la condición que el mail sea igual al que ingresamos.

Como sólo puede haber un registro que cumpla la condición, llamamos a la función mysqli_fetch_array en un if y no una estructura repetitiva como el listado:

if ($reg = mysqli_fetch_array($registros)) { 

En caso de retornar un vector asociativo la condición del if se verifica como verdadera y pasa a mostrar los datos, en caso de retornar false se ejecuta el else.