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(); }} ?>

Related Posts:

  • Patrón Factory PHPEl patrón Factory permita la instancia de objetos en tiempo de ejecución, la ventaja de utilizar este patrón de diseño es que tenemos centralizada la creación de los objetos en una clase que a pedido, nos devuelve instancias … Read More
  • Apuntes PDO PHPPDO proporciona una capa de abstracción de acceso a datos, lo que significa que, independientemente de la base de datos que se esté utilizando, se usan las mismas funciones para realizar consultas y obtener datos. Para … Read More
  • Patrón Singleton PHPSingleton o instancia única es un patrón de diseño cuya función es crear un único acceso global para restringir la creación de objetos pertenecientes a una clase o el valor de un tipo a un único objeto, de forma que garantiza… Read More
  • PHP PDO y Procedimientos Almacenados MySQLSe trataran diferentes escenarios y en toda la entrada se trabajara la sentencia SELECT en un procedimiento almacenado en MySQL que variara según el numero y el tipo de parámetros que acepte o que entregara. La tabla a utiliz… Read More
  • Patrón RegistryLa idea de este patrón es crear una clase que tenga un array donde guardar los objetos registrados y una serie de métodos: uno que añada los objetos al array, otro que compruebe su existencia para evitar duplicaciones, otro q… Read More