Curso de PHP🐘 y MySql🐬 [74.- Consultas preparadas para eliminar vulnerabilidades🐛]

En este tutorial vamos a cambiar nuestra consulta via query por una consulta preparada para evitar vulnerabilidades.
Via Query

query(“Select * from tabla where id=$_REQUEST['id']”);

Via Consulta preparada

prepare(“Select * from tabla where id=:id”);
bindParam(":id",$_REQUEST['id']);

Codigo: https://github.com/programadornovato/php/commit/25bfffe8a44e1919e4de5be9aa13a308428f1c5c

<?php
    class sqlite{
        static private $db=null;
        function __construct()
        {
            try {
                self::$db=new PDO("sqlite:empresa.sqlite");
                self::$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
                self::$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_OBJ);    
                self::crearTablas();
            } catch (\Throwable $th) {
                die("Error al crear la bd empresa ".$th->getMessage());
            }
        }
        private static function crearTablas(){
            $query="CREATE TABLE IF NOT EXISTS productos(
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                nombre VARCHAR (100) NOT NULL,
                precio REAL,
                categoria VARCHAR (100) NOT NULL,
                existencia INTEGER (5) NOT NULL,
                foto VARCHAR (100) NOT NULL
            );";
            try {
                self::$db->exec($query);
            } catch (\Throwable $th) {
                echo "Error al crear la tabla productos".$th->getMessage();
            }
        }
        public function insertar($producto=array()){
            //$nombre=$producto['nombre'];
            extract($producto);
            $query="INSERT INTO productos 
            (nombre, precio, categoria, existencia, foto)VALUES 
            (:nombre,:precio,:categoria,:existencia,:foto);";
            $sentecia=self::$db->prepare($query);
            $sentecia->bindParam(':nombre',$nombre);
            $sentecia->bindParam(':precio',$precio);
            $sentecia->bindParam(':categoria',$categoria);
            $sentecia->bindParam(':existencia',$existencia);
            $sentecia->bindParam(':foto',$foto);
            if($sentecia->execute()==true){
                return true;
            }
            else{
                return true;
            }
        }
        public function leer($buscar=array()){
            $where=" where 1=1 ";
            if(empty($buscar['id'])==false){
                $where=$where." and id=:id ";
            }
            if(empty($buscar['nombre'])==false){
                $where=$where." and nombre=:nombre ";
            }
            if(empty($buscar['precio'])==false){
                $where=$where." and precio=:precio ";
            }
            if(empty($buscar['categoria'])==false){
                $where=$where." and categoria=:categoria ";
            }
            if(empty($buscar['existencia'])==false){
                $where=$where." and existencia=:existencia ";
            }
            $query="SELECT id, nombre, precio, categoria, existencia, foto
            FROM productos
            $where ;";
            $sentencia=self::$db->prepare($query);
            if(empty($buscar['id'])==false){
                $sentencia->bindParam(":id",$buscar['id']);
            }
            if(empty($buscar['nombre'])==false){
                $sentencia->bindParam(":nombre",$buscar['nombre']);
            }
            if(empty($buscar['precio'])==false){
                $sentencia->bindParam(":precio",$buscar['precio']);
            }
            if(empty($buscar['categoria'])==false){
                $sentencia->bindParam(":categoria",$buscar['categoria']);
            }
            if(empty($buscar['existencia'])==false){
                $sentencia->bindParam(":existencia",$buscar['existencia']);
            }
            $sentencia->execute();
            $resultado=$sentencia->fetchAll();
            return $resultado;
        }
    }
?>

🎦 Esta lista de reproducción: https://www.youtube.com/playlist?list=PLCTD_CpMeEKS2Dvb-WNrAuDAXObB8GzJ0

Codigos en gdrive: https://drive.google.com/file/d/1tQwYvfL2jiUFc6beTWkOkGmXkq5zzFw2/view?usp=sharing
Gracias por apoyar este canal: https://www.patreon.com/programadornovato?fan_landing=true

🔗 Facebook: https://facebook.com/ProgramadorNovatoOficial
🔗 Twitter: https://twitter.com/programadornova
🔗 Linkedin: https://www.linkedin.com/in/programadornovato/
🔗 Instagram: https://www.instagram.com/programadornovato/

Eugenio Chaparro

Entradas recientes

🟢Editar código de un módulo en Dolibarr [04]

🟢Editar código de un módulo en Dolibarr [04]

En este tutorial vamos editar el código de nuestro módulo personas para poder personalizar algunas…

2 meses hace
🟢Crear un sub_módulo en Dolibarr [03]

🟢Crear un sub_módulo en Dolibarr [03]

En este tutorial vamos a crear un sub módulo llamado seguridad que será muy parecido…

2 meses hace
🟢Modificar un módulo en Dolibarr [02]

🟢Modificar un módulo en Dolibarr [02]

En este tutorial aprenderemos a editar el objeto personas del modulo persona que creamos en…

2 meses hace
🟢Constructor de módulos en Dolibarr

🟢Constructor de módulos en Dolibarr

Como mencionamos anteriormente Dolibarr es un proyecto realizado sobre la base de una política clara:…

2 meses hace
🟢Tickets en Dolibarr [19]

🟢Tickets en Dolibarr [19]

Los ticket en dolibarr nos ayudan a comunicar inconveniente en nuestros productos y servicios dentro…

2 meses hace
🟢Agenda en Dolibarr [18]

🟢Agenda en Dolibarr [18]

Las agendas en dolibarr nos ayudan a ver las actividades realizadas en proceso y por…

2 meses hace