En un intento de protegerse contra las inyecciones de SQL, un desarrollador encontró un error al utilizar SQLite3 con Python 2.5. Al emplear el "?" recomendado sustitución de parámetros para evitar inyecciones, se enfrentaron al siguiente dilema:
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 8 supplied.
Este problema parecía surgir de la creación inicial de la base de datos, que contenía ocho enlaces. Sin embargo, usar la sustitución menos segura "%s" para cada nombre de elemento resolvió el problema.
for item in self.inventory_names: self.cursor.execute("SELECT weight FROM Equipment WHERE name = '%s'" % item) self.cursor.close()
La solución a esta perplejidad radica en comprender que el método Cursor.execute() requiere una secuencia como segundo parámetro. En este caso, el desarrollador proporcionaba una cadena que tenía ocho caracteres. Para rectificar esto, se debe implementar la siguiente modificación de código:
self.cursor.execute("SELECT weight FROM Equipment WHERE name = ?", [item])
Al cumplir con este parámetro especificación, el problema se puede abordar de manera efectiva, permitiendo una recuperación de datos segura y eficiente desde SQLite3.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3