PHP MySQL preparó declaraciones
declaraciones preparadas para evitar la inyección de MySQL es muy útil.
declaraciones preparadas y parámetros vinculados
declaraciones preparadas para ejecutar una pluralidad de la misma instrucción SQL y ejecutar de manera más eficiente.
Obras de sentencias preparadas de la siguiente manera:
Pretratamiento: Crear una plantilla de SQL comunicado enviado a la base de datos. El valor del parámetro reservado "?" Marcos. Por ejemplo:
INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
El análisis de bases de datos, compilar, ejecutar la optimización de consultas SQL plantilla de declaraciones, y almacena el resultado no se emite.
Ejecución: Por último, los valores de los parámetros pasados a la unión ( "?" Marca) la aplicación, base de datos ejecuta las instrucciones. Las aplicaciones pueden ser ejecutadas muchas veces, si el valor del parámetro no es el mismo.
En comparación con la ejecución directa de las sentencias SQL, declaración preparada tiene dos ventajas principales:
declaraciones preparadas reduce drásticamente el tiempo de análisis, sólo una consulta (aunque no se ejecutan las instrucciones).
parámetros permiten reducir el ancho de banda del servidor, sólo es necesario enviar una consulta de parámetros en lugar de toda la declaración.
declaraciones preparadas contra la inyección de SQL es muy útil, ya que después de utilizar protocolos diferentes para enviar valores de los parámetros para garantizar la legitimidad de los datos.
MySQLi preparó declaraciones
En el siguiente ejemplo se utiliza la MySQLi en una declaración preparada, y se unen los parámetros correspondientes:
Ejemplos (MySQLi utilizando declaraciones preparadas)
$ Nombredeservidor = "localhost";
$ Nombre de usuario = "nombre de usuario";
$ Contraseña = "contraseña";
$ DBName = "myDB";
// Crear conexión
$ Conn = new mysqli ($ nombre de servidor, $ usuario, $ password, $ nombredb);
// La conexión de prueba
if ($ conn-> connect_error) {
die ( "Error de conexión:" $ conn-> connect_error.);
}
// El tratamiento previo y vinculante
$ Stmt = $ conn-> prepare ( "INSERT INTO MyGuests (nombre, apellido, correo electrónico) VALUES (,,) ???");
$ Stmt-> bind_param ( "sss", $ apellido, apellido $, $ correo electrónico);
// establecer parámetros y realizar
$ Nombre = "Juan";
Apellido $ = "Doe";
$ Email = "[email protected]";
$ Stmt-> execute ();
$ Nombre = "María";
Apellido $ = "Moe";
$ Email = "[email protected]";
$ Stmt-> execute ();
$ Nombre = "Julie";
Apellido $ = "Dooley";
$ Email = "[email protected]";
$ Stmt-> execute ();
echo "El nuevo disco está insertado correctamente";
$ Stmt-> close ();
$ Conn-> close ();
?>
Analizar cada línea de código en los siguientes ejemplos:
En las sentencias SQL, se utiliza el signo de interrogación (?), Aquí podemos reemplazar el signo de interrogación entero, cadena, de doble precisión de punto flotante, y valores booleanos.
A continuación, vamos a ver bind_param () Función:
Los parámetros de SQL función de vinculación, y le dicen al valor del parámetro de base de datos. tipos de datos "Sss" de los parámetros de procesamiento de la columna para el resto de parámetros. s carácter le indica a la base de datos que la cadena de parámetros.
Hay cuatro tipos de parámetros:
- i - número entero (número entero)
- d - doble (punto flotante de doble precisión)
- s - string (cadena)
- b - BLOB (objeto binario grande: grandes objetos binarios)
Se requiere que cada parámetro para especificar el tipo.
El parámetro tipo de datos le dice a la base de datos, puede reducir el riesgo de inyección SQL.
Nota: Si desea insertar datos adicionales (de entrada del usuario), la verificación de los datos es muy importante. |
DOP preparó declaraciones en
Los siguientes ejemplos que utilizan comandos preparados en DOP y los parámetros de unión:
Ejemplos (DOP mediante declaraciones preparadas)
$ Nombredeservidor = "localhost";
$ Nombre de usuario = "nombre de usuario";
$ Contraseña = "contraseña";
$ DBName = "myDBPDO";
try {
$ Conn = new PDO ( "mysql: host = $ nombre de servidor; dbname = $ dbname", $ usuario, $ password);
// Establecer la excepción modo de error DOP
$ Conn-> setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION);
// parámetros de vinculación de pretratamiento y SQL
$ Stmt = $ conn-> prepare ( "INSERT INTO MyGuests (nombre, apellido, correo electrónico)
VALORES (: Nombre ,: apellido ,: correo electrónico) ");
$ Stmt-> bindParam ( ': Nombre', $ apellido);
$ Stmt-> bindParam ( ': apellido', $ apellido);
$ Stmt-> bindParam ( ': e-mail', $ correo electrónico);
// Insertar fila
$ Nombre = "Juan";
Apellido $ = "Doe";
$ Email = "[email protected]";
$ Stmt-> execute ();
// Introducir otra fila
$ Nombre = "María";
Apellido $ = "Moe";
$ Email = "[email protected]";
$ Stmt-> execute ();
// Introducir otra fila
$ Nombre = "Julie";
Apellido $ = "Dooley";
$ Email = "[email protected]";
$ Stmt-> execute ();
echo "El nuevo disco está insertado correctamente";
}
captura (PDOException $ e)
{
.. Echo $ sql "<br>" $ e-> getMessage ();
}
$ Conn = null;
?>