Execute en sentencias no preparadas – php

Pregunta:


Esta es una pregunta de consulta de conceptos.
Las sentencias preparadas protegen la consulta de sql injection.

$sth = $dbh->prepare('SELECT name, colour, calories FROM fruit
    WHERE calories < :calories AND colour = :colour');
$sth->bindParam(':calories', $calories);
$sth->bindParam(':colour', $colour);
$sth->execute();

Pero si no se utilizan valores externos no es necesario usar sentencias preparadas, por eso se usa Query() .

$sth = $dbh->query('SELECT name, colour FROM fruit
    WHERE calories < 50');

Pero no es mejor utilizar execute() también en sentencias no preparadas en lugar de query()?

Preguntado por: Piropeator

shadow

Las sentencias antes de ser procesadas deben ser preparadas, por que en un ambiente de producción van a responder a la interactividad que de el usuario; es decir un select, insert, update o delete dependerán de las variables que mande el usuario:

//ejemplo
$enunciado = $conexion->prepare("SELECT * FROM ventas WHERE producto = :producto");

Para el caso anterior la respuesta del sistema dependerá de la información que mande el usuario

//ejemplo
$enunciado = $conexion->prepare("SELECT * FROM ventas WHERE producto = :producto");
$ejecutar->bindParam(':producto', $producto, PDO::PARAM_STR);
$ejecutar->execute();

Si tu solo estás ejecutando pruebas en local donde no es un ambiente
real para tu aplicativo ahi si esta demás; pero generalmente los
desarrollos van a producción por lo tanto deben de pasar las
sentencias por el método prepare así como identificar los valores que
llegan por medio de los apuntadores de posición y al final indicar el
tipo de dato que llega

El hecho no va en que sea como tal una opinión de si es mejor o no, si no por el hecho de que las sentencias no solo deben responder a op con la base de datos si no así mismo proteger el usuario que esta usándolas para evitar ataques de inyección SQL

Si no lo haces estas eliminando la buena práctica de proteger tus
consultas SQL, cosa que para cualquier desarrollo deben estar
presentes

Te aconsejo que tengas presente que no solo tengas presente execute() o bindParam si no también:

  1. PDO::PARAM_STR
  2. PDO::PARAM_INT

Para que con lo anterior al momento de hacer bindParam se identifique el tipo de valor que se esta pasando

Fuente

Tags:

Add a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *