你好,我正在尝试使用Flask和my数据库执行一个SQL查询,查询返回一个JSON在前端管理我的JQuery。目标是使用搜索栏来查找与数据库匹配的任何内容。例如,如果我只使用一个"like“句子,那么查询就可以正常工作。
query = "SELECT terapia.*,terapeuta.nombre,cliente.nombres, especialidad.descripcion FROM terapia LEFT JOIN terapeuta ON terapeuta.id_terapueta = terapia.terapeuta_id_terapueta LEFT JOIN cliente ON cliente.id_cliente = terapia.cliente_id_cliente LEFT JOIN especialidad ON especialidad.id_especialidad = terapeuta.id_especialidad WHERE especialidad.descripcion LIKE '{}%'".format(searchbox)
但在我使用and "OR“语句进行多次搜索时,如下所示:
query = "SELECT terapia.*,terapeuta.nombre,cliente.nombres, especialidad.descripcion FROM terapia LEFT JOIN terapeuta ON terapeuta.id_terapueta = terapia.terapeuta_id_terapueta LEFT JOIN cliente ON cliente.id_cliente = terapia.cliente_id_cliente LEFT JOIN especialidad ON especialidad.id_especialidad = terapeuta.id_especialidad WHERE especialidad.descripcion LIKE '{}%' or terapeuta.nombre LIKE '{}%'".format(searchbox)
查询根本不起作用,并输出此错误
奇怪的是,在Dbebaber上执行相同的查询可以很好地工作,显然将'{}%‘替换为'string%',我不知道为什么查询拒绝工作,此外,我还包含了完整的python和Jquery代码。
烧瓶:
from flask import render_template, request, redirect, url_for, session, flash, jsonify
@terapia.route('/livesearch', methods=["POST","GET"])
def livesearch():
searchbox = request.form.get('text')
cur = mysql.connection.cursor()
query = "SELECT terapia.*,terapeuta.nombre,cliente.nombres, especialidad.descripcion FROM terapia LEFT JOIN terapeuta ON terapeuta.id_terapueta = terapia.terapeuta_id_terapueta LEFT JOIN cliente ON cliente.id_cliente = terapia.cliente_id_cliente LEFT JOIN especialidad ON especialidad.id_especialidad = terapeuta.id_especialidad WHERE especialidad.descripcion LIKE '{}%' or terapeuta.nombre LIKE '{}%'".format(searchbox)
cur.execute(query)
result = cur.fetchall()
return jsonify(result)
HTML和JQUERY
<div class="col-md-12">
<input type="text" id="livebox">
<p id="search-response"></p>
</div>
<script>
$(document).ready(function(){
$("#livebox").on("input", function(e){
let textinlivebox = $("#livebox").val();
$.ajax({
method: "POST",
url: "/terapia/livesearch",
data:{text: textinlivebox},
success: function(res){
//document.getElementById('search-response').innerHTML = res;
console.log(res)
}
})
});
});
</script>
欢迎任何帮助或建议。
发布于 2021-06-26 00:44:39
请仔细阅读SQL注入漏洞,并使用:
query = 'SELECT ... FROM ... WHERE especialidad.descripcion LIKE %s or terapeuta.nombre LIKE %s'
cur.execute(query, (searchbox, searchbox))
这将转义用户输入,因此恶意用户无法将SQL命令写入搜索框。
发布于 2021-06-26 16:55:23
请查看here以了解如何在sql炼金术(负责sql注入)中使用'like‘。
此外,我建议您阅读更多关于sqlalchemy的内容,以便编写尽可能具有可读性的查询。
https://stackoverflow.com/questions/68134406
复制相似问题