Я также заметил онлайн, хотя обратные помехи не являются стандартным SQL.
у небольшой скрипт на python, чтобы помочь мне автоматизировать создание баз данных mysql и связанных учетных записей для моих личных проектов. Часть этого скрипта представляет собой функцию, которая принимает имя базы данных в виде строки, а затем переходит к созданию базы данных.
def createDB(dbConn, dbName):
import MySQLdb
c = dbConn.cursor()
query = """CREATE DATABASE %s;""";
c.execute(query, (dbName,))
Это не работает, потому чтоБаза данных MySQL CREATE запрашивает имя базы данных без кавычек, как в
CREATE DATAbASE test_db
но мой код, который пытается безопасно вставить предоставленное пользователем имя базы данных в запрос, создает:
CREATE DATABASE 'test_db'
И вы получите «у вас проблема в синтаксисе MySQL рядом с тестом».
Несмотря на то, что это для личного использования, я действительно не хочу просто вставлять предоставленную пользователем строку в запрос любого вида. Это против моей религии. Есть ли безопасный способ вставить предоставленное пользователем имя базы данных в запрос MySQL на Python (или любой другой язык), который будет гарантировать, что пользовательский ввод, такой какtest_db; DROP some_other_db;
будет отклонен или сбежал правильно?