Как я могу найти запись в MySQL, используя Python

Я знаю, что на это уже был дан ответ, какова фактическая проблема, однако я хочу предложить простой обходной путь.

Я хотел использовать метод get_results (), однако у меня не было драйвера , и я не где-то, я могу добавить это. Итак, прежде чем я позвонил

$stmt->bind_results($var1,$var2,$var3,$var4...etc);

, я создал пустой массив и просто привязал результаты как ключи в этом массиве:

$result = array();
$stmt->bind_results($result['var1'],$result['var2'],$result['var3'],$result['var4']...etc);

, чтобы эти результаты могли быть легко переданы в методы или переданы объекту для дальнейшего использования.

Надеюсь, это поможет любому, кто хочет сделать что-то подобное.

-1
задан lospejos 18 January 2019 в 08:28
поделиться

1 ответ

У вас есть пара проблем с вашим кодом:

  1. В вашем операторе SQL SELECT вы ищете значения в текстовых столбцах (TEXT, VARCHAR и т. Д.). Для этого необходимо добавить одинарные кавычки в критерии поиска, так как вы хотите указать текстовый литерал. Поэтому WHERE title={} должно быть WHERE title='{}' (то же самое относится и к другим параметрам).
  2. Если один или несколько ваших аргументов пусты, вы будете искать строки, в которых соответствующее значение является пустым текстом. Таким образом, в вашем примере search(title='test2') запустит поиск записи, где столбец title имеет значение 'test2' или любой из трех других столбцов (author, year и isbn) имеет пустой текст , Если вы решили искать заголовок 'test2', это будет работать только в том случае, если ни один из других столбцов не будет когда-либо содержать пустой текст. И даже в этом случае из-за трех OR операторов в вашем запросе производительность будет низкой. Вместо этого вам следует оценить каждый параметр индивидуально и построить запрос только с непустыми параметрами.
  3. Создавая запрос с форматированием строки, вы создадите серьезную проблему безопасности в случае, если значения ваших параметров поиска поступают из пользовательского ввода. Ваш код широко открыт для внедрения SQL-кода, который является одной из самых простых и эффективных атак в вашей системе. Вы должны всегда параметризировать свои запросы , чтобы предотвратить эту атаку. По общему принципу никогда не создают запросы SQL, формируя или объединяя строки с их параметрами. Обратите внимание, что с параметризованными запросами вам не нужно добавлять к вашему запросу одинарные кавычки, как написано в пункте 1.
0
ответ дан Sefe 18 January 2019 в 08:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: