Как сделать безопасно строку с sql запросом и различными параметрами?

Ссылка скопирована
1 ответ

Добрый день. Подскажите безопасно ли выполнять запросы сформированные таким образом, смущает f строка. И как реализовать кавычки для условий с строковыми столбцами.

def objects(**kwargs):     query = '''     SELECT id as oid, name, ct_date, info     FROM "test".public."Сourier"     %(where)s;     '''          return query % {'where': f"WHERE {' AND '.join([f'{key} = {value}' for key, value in kwargs.items()])}" if kwargs else ''}      print(objects(display_name=1, info='test'))  ---Вывод SELECT id as oid, name, ct_date, info FROM "test".public."Сourier" WHERE display_name = 1 AND info = test;

def objects(**kwargs): query = ''' SELECT id as oid, name, ct_date, info FROM "test".public."Сourier" %(where)s; ''' return query % {'where': f"WHERE {' AND '.join([f'{key} = {value}' for key, value in kwargs.items()])}" if kwargs else ''} print(objects(display_name=1, info='test')) ---Вывод SELECT id as oid, name, ct_date, info FROM "test".public."Сourier" WHERE display_name = 1 AND info = test;

Дополнительно:

Имена таблиц и столбцов можно подставлять f-строкой, если у тебя нет другого выбора и ты гарантируешь, что туда не попадёт пользовательский ввод.
Для значений нужно использовать подстановку параметров.

Ответы:

https://www.google.com/search?q=python+mysql+prepa...

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Ольга Сеть Ответ

Для безопасного выполнения SQL запросов с использованием параметров следует использовать подготовленные запросы. Подготовленные запросы позволяют отделить код SQL запроса от данных, что обеспечивает безопасность от SQL инъекций.

Вот пример использования подготовленного запроса с параметрами в PHP:

// Подключение к базе данных
$pdo = new PDO("mysql:host=хост;dbname=имя_базы_данных", "пользователь", "пароль");
 
// SQL запрос с параметрами
$sql = "SELECT * FROM users WHERE username = :username AND email = :email";
 
// Подготовка запроса
$stmt = $pdo->prepare($sql);
 
// Привязка параметров
$stmt->bindParam(':username', $username);
$stmt->bindParam(':email', $email);
 
// Выполнение запроса
$stmt->execute();
 
// Получение результата
$result = $stmt->fetchAll();

// Подключение к базе данных $pdo = new PDO("mysql:host=хост;dbname=имя_базы_данных", "пользователь", "пароль"); // SQL запрос с параметрами $sql = "SELECT * FROM users WHERE username = :username AND email = :email"; // Подготовка запроса $stmt = $pdo->prepare($sql); // Привязка параметров $stmt->bindParam(':username', $username); $stmt->bindParam(':email', $email); // Выполнение запроса $stmt->execute(); // Получение результата $result = $stmt->fetchAll();

В данном примере переменные $username и $email представляют значения, которые будут использоваться в SQL запросе. При использовании подготовленных запросов с параметрами, данные будут автоматически экранироваться, что обеспечивает безопасность от SQL инъекций.

Таким образом, использование подготовленных запросов с параметрами позволяет безопасно работать с SQL запросами, защищая ваше приложение от потенциальных угроз безопасности.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно