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

Compartir
Publicado por
Eugenio Chaparro

Entradas recientes

Ejercicio.- Adivinar un numero random en kotlin (Curso de Kotlin desde cero [34])

Ejercicio.- Adivinar un numero random en kotlin (Curso de Kotlin desde cero [34])

En este tutorial vamos a hacer un programa que: Generamos un número aleatorio entre 1…

5 meses hace
Ejercicio.- Dibujar una escalera con asteriscos con ciclo for (Curso de Kotlin desde cero [33])

Ejercicio.- Dibujar una escalera con asteriscos con ciclo for (Curso de Kotlin desde cero [33])

Crear un programa en kotlin dibuje una escalera de asteriscos. Pedir al humano el tamaño…

5 meses hace
Ciclo for (Curso de Kotlin desde cero [32])

Ciclo for (Curso de Kotlin desde cero [32])

Los ciclos for son lo que se conoce como estructuras de control de flujo cíclicas…

5 meses hace
Ciclo do while (Curso de Kotlin desde cero [31])

Ciclo do while (Curso de Kotlin desde cero [31])

La sentencia (hacer mientras) crea un bucle que ejecuta una sentencia especificada, hasta que la…

5 meses hace
Ciclos while (Curso de Kotlin desde cero [30])

Ciclos while (Curso de Kotlin desde cero [30])

Los ciclos while son una estructura cíclica, que nos permite ejecutar una o varias líneas…

5 meses hace
Ejercicio.- Juego de azar con dados (Curso de Kotlin desde cero [29])

Ejercicio.- Juego de azar con dados (Curso de Kotlin desde cero [29])

En este tutorial vamos a crear un juego de azar con las siguientes características.En una…

5 meses hace