Python MySQL编程错误1064 with SELECT语句

Python MySQL编程错误1064 with SELECT语句,python,mysql,Python,Mysql,我得到以下错误: 编程错误:(1064,“您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解在“tbl_linux_chks”附近使用的正确语法,其中“check_name”类似于第1行的“%test%”) 试试这个: table = "tbl_" + platform + "_chks" search = "%" + search + "%" cur.execute('''SELECT check_id,check_name,%s, FROM %s WHERE %s LIK

我得到以下错误:

编程错误:(1064,“您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解在“tbl_linux_chks”附近使用的正确语法,其中“check_name”类似于第1行的“%test%”)

试试这个:

table = "tbl_" + platform + "_chks"
search = "%" + search + "%"

cur.execute('''SELECT check_id,check_name,%s, FROM %s WHERE %s LIKE %s;''', (field,table,field,search))
此驱动程序开发人员将参数与查询分开的原因是安全性。因此,在使用此解决方案之前,您应该注意变量中的数据。

尝试以下方法:

table = "tbl_" + platform + "_chks"
search = "%" + search + "%"

cur.execute('''SELECT check_id,check_name,%s, FROM %s WHERE %s LIKE %s;''', (field,table,field,search))

此驱动程序开发人员将参数与查询分开的原因是安全性。因此,在使用此解决方案之前,您应该注意变量中的数据。

%s
查询参数占位符只能用于查询参数,不能用于表或列名等标识符。使用查询参数时,字符串在插入查询之前自动重新引用和转义,但表名和列名的引用是不同的

MySQL使用单引号或双引号引用值,但使用倒钩(`)引用标识符

要使其正常工作,您需要首先创建查询(使用字符串格式),然后可以使用查询参数执行该查询:

cur.execute("""SELECT check_id,check_name,{} 
               FROM tbl_{}_chks 
               WHERE {} LIKE '%%{}%%'
               """.format(field,platform,field,search))

请确保
平台
字段
不来自用户输入,否则您将有sql注入漏洞。

%s
查询参数占位符只能用于此目的,不能用于表或列名等标识符。使用查询参数时,字符串将自动在插入到查询中之前,引用和转义,但表名和列名的引用是不同的

MySQL使用单引号或双引号引用值,但使用倒钩(`)引用标识符

要使其正常工作,您需要首先创建查询(使用字符串格式),然后可以使用查询参数执行该查询:

cur.execute("""SELECT check_id,check_name,{} 
               FROM tbl_{}_chks 
               WHERE {} LIKE '%%{}%%'
               """.format(field,platform,field,search))


确保
平台
字段
不来自用户输入,否则您将有sql注入漏洞。

您不能像这样在表或字段名中使用参数。没有其他选择吗?如果/elif语句您必须将值连接到sql stri我已经用你的建议编辑了我的问题(见上文),仍然出现相同的错误您不能使用%s作为表名或字段名。请将正确的字符串放在那里。您不能像这样在表名或字段名中使用参数。没有其他选择吗?我不希望有多余的if/elif语句。您必须手动将值连接到SQL字符串。并且您必须确保它们都是手动的我已经根据你的建议编辑了我的问题(见上文),仍然出现相同的错误您不能使用%s作为表名或字段名。请将正确的字符串放在那里。现在它给了我TypeError:没有足够的参数用于格式化字符串变量字段、平台、字段、搜索中的数据是什么?可能是它们有规范符号吗?这很有效!谢谢!这在sql注入中很容易受到攻击!@mata这取决于on变量的来源。现在它给了我TypeError:没有足够的参数用于格式字符串变量字段、平台、字段、搜索中的数据是什么?可能是因为它们有规范符号吗?成功了!谢谢!这对sql注入非常脆弱!@mata它取决于变量的来源。