【问题标题】:python- sqlite3.OperationalError: near "<": syntax errorpython- sqlite3.OperationalError:靠近“<”:语法错误
【发布时间】:2018-12-10 12:36:54
【问题描述】:

我正在使用 python 3.6。当我尝试实现这一点时,在行: cursor=conn.execute(cmd) 它引发了标题错误,有人可以帮助我吗?非常感谢。
编辑:我通过将 str(id) 编辑为 str(Id) 找到了解决方案

def getProfile(id):
    conn=sqlite3.connect("FaceBase.db")
    cmd="SELECT * FROM People WHERE ID=" +str(id)
    cursor=conn.execute(cmd)
    profile=None
    for row in cursor:
       profile=row
    conn.close()
    return profile

【问题讨论】:

  • 你为什么不打印出cmd。也许id 并不是你想的那样。
  • 与问题主题无关的评论,但请确保您没有将任何 sql 注入传递到“id”字符串中。
  • 我应该如何解决?这是一个基于我输入的ID运行的人脸识别程序

标签: python sqlite


【解决方案1】:

您的查询的错误是您没有在 cmd 中包含引号,如果您的参数是字符串,则需要这些引号。应该是这样的:

cmd="SELECT * FROM People WHERE ID='{}'".format(str(id))

正如@Aaron_ab 在评论中提到的那样。你不应该使用这样的 SQL 查询,因为恶意用户可以进行 SQL 注入。例如,如果他将 ID 设为1' OR 1=1 /*,它将返回表的所有行。

始终尝试使用不允许用户伪造自己的 SQL 语句的准备好的语句。一个例子:

cmd="SELECT * FROM People WHERE ID=%s"
curs.execute(cmd, (str(id),))

【讨论】:

    猜你喜欢
    • 2016-11-29
    • 1970-01-01
    • 2021-05-11
    • 2019-02-07
    • 2020-02-06
    • 2019-01-12
    • 2014-05-17
    • 2021-10-19
    • 2018-07-27
    相关资源
    最近更新 更多