"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Python에서 SQLite3을 사용할 때 \"?\" 매개변수 대체를 사용할 때 \"잘못된 바인딩 수가 제공\"되는 이유는 무엇입니까?

Python에서 SQLite3을 사용할 때 \"?\" 매개변수 대체를 사용할 때 \"잘못된 바인딩 수가 제공\"되는 이유는 무엇입니까?

2024-11-07에 게시됨
검색:620

When Using SQLite3 in Python, Why \

SQLite 매개변수 대체 수수께끼

SQL 주입을 방지하기 위해 개발자가 Python 2.5에서 SQLite3을 사용하는 동안 오류가 발생했습니다. 추천 "?"를 사용하는 경우 주입을 방지하기 위해 매개변수 대체를 시도하면서 그들은 다음과 같은 딜레마에 직면했습니다:

sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 8 supplied.

이 문제는 8개의 바인딩이 포함된 데이터베이스의 초기 생성에서 발생한 것으로 보입니다. 그러나 각 항목 이름에 대해 덜 안전한 "%s" 대체를 사용하면 문제가 해결되었습니다.

for item in self.inventory_names:
    self.cursor.execute("SELECT weight FROM Equipment WHERE name = '%s'" % item)
    self.cursor.close()

이러한 문제에 대한 해결책은 Cursor.execute() 메서드에 두 번째 매개 변수로 시퀀스가 ​​필요하다는 점을 이해하는 데 있습니다. 이 경우 개발자는 우연히 8자 길이의 문자열을 제공했습니다. 이를 수정하려면 다음 코드 수정을 구현해야 합니다.

self.cursor.execute("SELECT weight FROM Equipment WHERE name = ?", [item])

이 매개변수를 준수하여 사양에 따라 문제를 효과적으로 해결하여 SQLite3에서 안전하고 효율적인 데이터 검색이 가능합니다.

릴리스 선언문 이 글은 1729322955에서 재인쇄되었습니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3