问题描述
CREATE TABLE tutors (
id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50) NOT NULL,email VARCHAR(320) NOT NULL,description VARCHAR(400) NOT NULL,image VARCHAR(150) NOT NULL,applyDate DATE NOT NULL)
但是,当我尝试插入用户输入的数据时,例如
arguments = ("Name","[email protected]","desc","C:\\Users\\path\\to\\image.png","2020-08-23")
使用Python和代码
cursor.execute("INSERT INTO tutors (name,email,description,image,applyDate) VALUES (?,?,?)",arguments)
conn.commit()
它给我以下错误:
MysqL.connector.errors.ProgrammingError: Not all parameters were used in the sql statement.
当我将每个?
替换为%s
时,它可以工作,但是我已经读到%s
容易受到sql注入攻击,因此,我尽可能避免使用它。 ?
无法正常工作吗?
解决方法
?
占位符仅与准备好的语句游标一起使用,例如cursor = conn.cursor(prepared=True)
。
如果您不想或不需要使用准备好的语句,请使用%s
作为占位符。这是安全的,因为在执行查询之前,将对它们的值进行转义和引用。