Un formulario de login arma su consulta pegando directamente lo que el usuario escribió: "SELECT * FROM usuarios WHERE correo = '" + correo_escrito + "'".
Si alguien escribe algo como ' OR '1'='1 en el campo de correo, esa condición se convierte en parte real de la consulta
Con parámetros (marcadores como ? o :correo), el motor SIEMPRE trata el valor como un dato, nunca como parte de la instrucción SQL
Una consulta armada con + puede funcionar perfecto en pruebas normales, y ser insegura igual
El usuario nunca debería poder cambiar la ESTRUCTURA de una consulta
Un campo de texto debería poder cambiar solo el VALOR que se busca, nunca agregar condiciones, palabras clave o instrucciones nuevas a la consulta.