12 de mayo de 2015

Buscador PHP utilizando MySQLi

Antes de empezar hago la acotación que este es un ejemplo básico pero que aun se utiliza, lo mejor seria utilizar Jquery para utilizar AJAX y recibir los mensajes vía JSON, también utilizar Jquery Validate para el campo obligatorio que en este caso es el DUI, pero es una recomendación, si es puro php lo que te interesa te va servir.

Los parámetros de configuración de la base de datos es una buena practica tenerlos en un archivo php por separado a fin de poder modificarlos de ser necesario, también te puedes crear una archivo .ini, en este caso para el ejemplo se llama parametros.php

<?php
define ('cn_host','localhost');
define ('cn_username','root');
define ('cn_password','');
define ('cn_database','ejemplo');
?>

Para conectarme a la base de datos utilizo la funcion conectarse() la cual pide los parametros definidos anteriormente y utiliza mysqli, esta funcion devuelve la conexion a la base de datos especificada en parametros.php o un error i no se alcanza la conexion
<?php
require_once "parametros.php";

 function conectarse(){
 
 $mysql= new mysqli(cn_host, cn_username, cn_password);
 if($mysql->connect_error){
  echo "Error conectandose al servidor de base de datos";
  echo "/n";
  echo $mysql->connect_error;
     exit();
 }
 if(!($mysql->select_db(cn_database))){
  echo "Error al conectarse a la base de datos";
 }
 return $mysql;
}
?>

por ultimo el buscador.php, solo hacer notar que debería existir un formulario que envíe por el método POST la información de ID_name, un ejemplo básico podría ser este

Buscador PHP - Mysqli ID a buscar:
Ahora si, el código que realiza la búsqueda en la base de datos según el dui proporcionado
<?php
require_once "conexion.php";
$mysqli = conectarse(); 
$query="select Nombre from empleado_php where ID=?";
$dato= trim($_POST['ID_name']);
$dato = filter_var($dato, FILTER_SANITIZE_STRING);
if($dato == null){
echo "debe especificar el valor del DUI a buscar";
exit(); 
}

//puede utilizarse try-catch(Exception $e)
 
if(!($stmt=$mysqli->stmt_init())){
 echo "Error en stmt_init";
 exit();
}
if(!($stmt->prepare($query))){
 echo "Error al preparar la consulta";
 exit();
}
if(!($stmt->bind_param("s",$dato))){
 echo "Error anexando parametro";
 exit();
}
if(!($stmt->execute())){
 echo "Error al ejecutar la consulta";
 exit();
}

if(!($stmt->bind_result($nombre))){
 echo"Error al anexar resultado";
 exit();
}

// store_result debe aparecer antes de fetch()
$stmt->store_result();
$stmt->fetch();
$count = $stmt->num_rows();

if($count!=null){
echo "Se encontraron " .$count. " resultados";
echo "";
echo "El dui " .htmlspecialchars($dato). "  pertenece al empleado " .htmlspecialchars($nombre);
}
else { echo "no se encontraron resultados para el DUI " .$dato. "."; }
$stmt->close();
$mysqli->close();
?>
y si recogiéramos mas de un resultado? en ese caso utilizamos un while y mostramos los resultados, como muestres esos resultados depende de ti, en mi caso utilizare una tabla, recuerda que debes anexar este código según lo que necesites al código mostrado anteriormente
<?php
require_once "conexion.php";
error_reporting(E_ALL);
 
CargarDatos();

function CargarDatos(){ 
$query= "select * from empleado_php";

 try{
 if(!$mysqli = conectarse()){
  die("Error al crear la conexion:  " .$mysqli->connect_error);
 }
 if(!$stmt= $mysqli->query($query)){
    die('Ocurrio un error: [' . $mysqli->error . ']');
}
 
 if($stmt->num_rows > 0){
 echo "Total de registros:  " .$stmt->num_rows;
    echo "


"; echo''; while($row = $stmt->fetch_object()) { echo''; } echo '
ID Nombre
'.$row->ID.' '.$row->Nombre.'
'; }else{ echo "No hay resultados"; } }catch(Exception $e){ echo "Error " .$e->getMessage(); }} ?>