Heim  >  Artikel  >  Backend-Entwicklung  >  Warum wird bei der Verwendung von SQLite3 in Python die „Falsche Anzahl der bereitgestellten Bindungen“ bei Verwendung der „?“-Parametersubstitution angezeigt?

Warum wird bei der Verwendung von SQLite3 in Python die „Falsche Anzahl der bereitgestellten Bindungen“ bei Verwendung der „?“-Parametersubstitution angezeigt?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-19 15:30:03154Durchsuche

When Using SQLite3 in Python, Why

SQLite-Parametersubstitutions-Rätsel

Beim Versuch, sich vor SQL-Injections zu schützen, ist ein Entwickler bei der Verwendung von SQLite3 mit Python 2.5 auf einen Fehler gestoßen. Bei Verwendung des empfohlenen „?“ Nachdem sie Parameter ersetzt hatten, um Injektionen zu verhindern, standen sie vor dem folgenden Dilemma:

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

Dieses Problem schien auf die ursprüngliche Erstellung der Datenbank zurückzuführen zu sein, die acht Bindungen enthielt. Die Verwendung der weniger sicheren „%s“-Ersetzung für jeden Elementnamen löste das Problem jedoch.

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

Die Lösung dieser Verwirrung liegt darin, zu verstehen, dass die Cursor.execute()-Methode eine Sequenz als zweite benötigt Parameter. In diesem Fall stellte der Entwickler eine Zeichenfolge bereit, die zufällig acht Zeichen lang war. Um dies zu beheben, sollte die folgende Codeänderung implementiert werden:

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

Durch die Einhaltung dieser Parameterspezifikation kann das Problem effektiv behoben werden, was einen sicheren und effizienten Datenabruf von SQLite3 ermöglicht.

Das obige ist der detaillierte Inhalt vonWarum wird bei der Verwendung von SQLite3 in Python die „Falsche Anzahl der bereitgestellten Bindungen“ bei Verwendung der „?“-Parametersubstitution angezeigt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn