Las declaraciones preparadas son muy útiles para prevenir la inyección de MySQL.
Las declaraciones preparadas se utilizan para ejecutar varias declaraciones SQL idénticas de manera más eficiente.
Las declaraciones preparadas funcionan de la siguiente manera:
Preprocesamiento: cree plantillas de declaraciones SQL y envíelas a la base de datos. Los valores reservados están marcados con el parámetro "?". Por ejemplo:
INSERTAR EN MisInvitados (nombre, apellido, correo electrónico) VALORES(?, ?, ?)
Análisis de bases de datos, compilación, optimización de consultas en plantillas de declaraciones SQL y almacenamiento de resultados sin salida.
Ejecución: finalmente, el valor vinculado a la aplicación se pasa al parámetro ("?") y la base de datos ejecuta la declaración. La aplicación puede ejecutar la declaración varias veces si los valores de los parámetros son diferentes.
En comparación con la ejecución directa de sentencias SQL, las sentencias preparadas tienen dos ventajas principales:
Las declaraciones preparadas reducen en gran medida el tiempo de análisis, ya que solo se realiza una consulta (aunque la declaración se ejecuta varias veces).
Los parámetros vinculantes reducen el ancho de banda del servidor; solo necesita enviar los parámetros de la consulta en lugar de la declaración completa.
Las declaraciones preparadas son muy útiles para la inyección SQL porque se utilizan diferentes protocolos después de enviar los valores de los parámetros, lo que garantiza la validez de los datos.
El siguiente ejemplo utiliza declaraciones preparadas en MySQLi y vincula los parámetros correspondientes:
Analice cada línea de código para el siguiente ejemplo:
"INSERTAR EN MisInvitados (nombre, apellido, correo electrónico) VALORES (?, ?, ?)"En la declaración SQL, usamos el signo de interrogación (?), aquí podemos reemplazar el signo de interrogación con un número entero, una cadena, un punto flotante de doble precisión y un valor booleano.
A continuación, echemos un vistazo a la función bind_param():
$stmt->bind_param("sss", $nombre, $apellido, $correo electrónico);Esta función vincula los parámetros SQL y le dice a la base de datos el valor de los parámetros. La columna de parámetros "sss" maneja los tipos de datos de los parámetros restantes. El carácter s le dice a la base de datos que el parámetro es una cadena.
Hay cuatro tipos de parámetros:
i - entero (tipo entero)
d - doble (tipo coma flotante de doble precisión)
s - cuerda
b - BLOB (objeto binario grande: objeto binario grande)
Cada parámetro requiere un tipo específico.
Al indicarle a la base de datos el tipo de datos del parámetro, puede reducir el riesgo de inyección SQL.
Nota: Si desea insertar otros datos (entrada del usuario), la validación de los datos es muy importante. |
En el siguiente ejemplo, utilizamos declaraciones preparadas y parámetros de enlace en PDO: