table = "tbl_" + platform + "_chks"
search = "%" + search + "%"
cur.execute('''SELECT check_id,check_name,%s, FROM %s WHERE %s LIKE %s;''', (field,table,field,search))
我收到以下错误:
ProgrammingError:(1064,“你的SQL语法有错误;请查看与你的MySQL服务器版本相对应的手册,以便在''tbl_linux_chks'附近使用正确的语法'WHERE'check_name'LIKE'%test%''在第1行)
答案 0 :(得分:0)
试试这个:
cur.execute("""SELECT check_id,check_name,{}
FROM tbl_{}_chks
WHERE {} LIKE '%%{}%%'
""".format(field,platform,field,search))
此驱动程序开发人员将参数与查询分开的原因是安全性。因此,在使用此解决方案之前,您应该注意变量中的数据。
答案 1 :(得分:0)
<a href="'@Url.Action("ChangeStateId","User")?userId='+$('#hidID').val()+ '&stateId=' +$('#hidStateId'.val()")></a>;
查询参数占位符只能用于查询参数,而不能用于表名或列名等标识符。使用查询参数时,字符串会在插入查询之前自动引用和转义,但表名和列名的引用不同。
MySQL使用单引号或双引号引用值,但它使用反引号(`)来引用标识符。
为了使其正常工作,您需要首先创建查询(使用字符串格式),然后您可以使用查询参数执行该查询:
%s
确保# `field` and `platform` must not come from user input, or be validated!
table = "tbl_" + platform + "_chks"
query = ('SELECT check_id, check_name, `{0}` FROM `{1}` WHERE `{0}` LIKE %s'
.format(field, table))
cur.execute(query, ("%" + search + "%",))
和platform
不是来自用户输入,否则您将有一个SQL注入漏洞。