PandaGG
Lok'tar ogar
Utilizando instrucciones preparadas y consultas parametizadas. Estas son sentencias SQL que son enviadas y analizadas por el servidor de la base de datos separadamente de cualquier parámetro. De esta manera es imposible para un atacante inyectar SQL malicioso.
Usando la extensión MySQLi o PDO y ciertos parámetros que utilizaremos a continuación, en este caso (como yo lo utilizo) voy a poner el ejemplo en MySQLi.
Previamente a empezar con las sentencias, necesitamos crear nuestra conexión con la base de datos, en este caso llamado conexion.php
conexion.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php ########################## $hostname = "servidor"; $username = "usuario db"; $password = "contraseña db"; $database = "base de datos"; ########################## $conexion = new mysqli($hostname, $username, $password, $database); /* comprobar conexión */ if ($conexion->connect_error) { die('Error de Conexión (' . $conexion->connect_errno . ') ' . $conexion->connect_error); } |
Una vez creada la conexión, podemos prevenir nuestras inyecciones usando sentencias parametizadas como en este ejemplo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
//Incluimos el anterior código php para poder establecer una conexión con la base de datos. Include_once significa que solo se incluya una vez, para que no se vuelva establecer más veces llevando a errores. include_once('conexion.php'); //En caso que enviemos mediante post un usuario establecemos variable para prepararla después. $nombre = $_POST['nombredelinput']; //Primero creamos la sentencia SQL $sql = "SELECT * FROM usuarios WHERE nombre = ?"; //Preparamos la sentencia anteriormente establecida $stmt = $conexión->prepare($sql); //$conexion es una variable previamente creada para conectarnos a nuestra db. //Enlazamos el parámetro a la sentencia. La "s" significa "string", en caso de tener un número sería "i". Opciones : i = integer, d = double, s = string, b = blob. $stmt->bind_param('s', $nombre); //Ejecutamos $stmt->execute(); //Obtenemos resultado $resultado = $stmt->get_result(); //Mientras que haya resultado de filas hacer algo con $row. while ($row = $result->fetch_assoc()) { // Hacer algo con $row. } //Y para acabar, liberamos memoria resultados en memoria y cerramos la consulta con close. $stmt->free_result(); $stmt->close(); |
¡Somos unos apasionados de este mundo! Nos encanta los videojuegos, realizamos reviews, guías, trucos y consejos sobre toda la actualidad en cualquier tipo de plataforma.
Participamos en el Programa de Asociados de Amazon Services LLC, un programa de afiliación publicitaria diseñado para proporcionarnos un medio para que ganemos tarifas al enlazar a Amazon.es y sitios afiliados.