MySQL 使用变量更新

MySQL update with variable

我在更新 table 时遇到问题。 该代码来自电报机器人。我们正在接收来自用户的消息,并要求他提供姓名。这就是变量 'first_name'。我们已经知道他的 user_id 是整数。 然后我正在尝试做

def bd_set(body):
    cursor.execute(body)
    connect.commit()

bd_set(f"INSERT INTO user_info (user_id,first_name) VALUES({user_id},{first_name})")

出现错误: no such column "John".

但是如果我尝试不使用变量,代码就可以工作:

bd_set(f"INSERT INTO user_info (user_id,first_name) VALUES({user_id},'John')")

所以,我无法输入变量(first_name),而变量'user_id'输入很容易。

什么可以解决这个问题?

引号有问题。由于first_name是一个字符串,而你使用的是f字符串,所以需要用引号

bd_set(f"INSERT INTO user_info (user_id,first_name) VALUES({user_id},'{first_name}')")

你应该尽量使用prepared statements来避免这类问题,避免sql注入

问题中的代码和现有答案中的代码存在相同的主要问题:它们完全开放 一个名为 SQL injection.[=15 的严重安全漏洞=]

不要通过将字符串粘在一起来构建 SQL 查询。

而是将参数分别传递给cursor.execute()

def bd_set(body, parameters=None):
    cursor.execute(body, parameters)
    connect.commit()

bd_set(
    f"INSERT INTO user_info (user_id, first_name) VALUES(%s, %s)",
    (user_id, first_name),
)

我将此处的占位符替换为 %s,但根据您的数据库驱动程序,您可能必须使用 different syntax