Điều này gây nhầm lẫn cho tất cả những người làm việc với MySQLDB. Bạn đang truyền các đối số cho hàm thực thi, không thực hiện thay thế chuỗi python. % S trong chuỗi truy vấn được sử dụng giống như một câu lệnh chuẩn bị hơn là một thay thế chuỗi python. Điều này cũng ngăn chặn việc đưa vào SQL vì MySQLDB sẽ thực hiện việc thoát cho bạn. Như bạn đã sử dụng trước đây (sử dụng% và thay thế chuỗi), bạn rất dễ bị tiêm.
- Không sử dụng dấu ngoặc kép. MySQLDB sẽ đặt chúng ở đó (nếu cần).
-
Sử dụng a, thay vì%. Một lần nữa, bạn đang truyền một tuple làm đối số cho hàm thực thi.
self.dbc.execute ("select * from car where reg =% s", (reg,))