带有SELECT语句的MySQL ProgrammingError 1064

时间:2016-08-22 18:47:26

标签: python mysql

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行)

2 个答案:

答案 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注入漏洞。