Создание правильного оператора mysql в php

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

Я знаю базовый синтаксис MySQL и умею его правильно писать, но, может быть, есть какое-нибудь другое / более красивое решение?

При поиске в базе данных необязательно заполнять все поля (например, вы хотите найти людей только с именем «Джон», поэтому оставьте поле «фамилия» пустым).

Мне нужно создать оператор MySQL без использования пустых полей, поэтому я решил использовать короткое if, что-то вроде этого:

"SELECT * FROM offers WHERE ".($Company_Name!= NULL)?"":"Company_Name ='".$Company_Name."'"

Но у меня есть 8 полей, так что я бы сделал по этому поводу серьезное заявление. Есть ли более короткий / простой способ решить эту проблему?

Я использую NetBeans 8.2 в Windows 10 и XAMPP для сервера Apache и базы данных.

В частности, вам необходимо передать все условия, для которых вы хотите проверить свою инструкцию MySQL. Нет более короткого пути.

Amit Merchant 10.08.2018 15:05

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

MonkeyZeus 10.08.2018 15:05

@MonkeyZeus спасибо, извините за очевидный вопрос, но я даже не знал, что мне спросить

Patryk Niklewicz 10.08.2018 15:11

Ничего страшного. Я предпочитаю указывать вам правильное направление, а не позволять вам продолжать путь плохого программирования. Кроме того, необходимо учитывать ситуацию, когда WHERE полностью пропускается, когда все 8 полей пусты.

MonkeyZeus 10.08.2018 15:14

@PatrykNiklewicz проверьте мой ответ stackoverflow.com/a/51787417/2469308 Это должно вам помочь. если он работает, пожалуйста, проголосуйте за и примите как правильный ответ :)

Madhur Bhaiya 10.08.2018 15:28
0
5
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В PHP сделайте что-то вроде этого:

// Initalizing query string
$sql = "SELECT * FROM table ";

// Preparing where conditions
$whr = array();
if (!empty($first_name)) {
    $whr[] = "first_name = '" . real_escape_string($first_name) . "'";
} 

/* Like this check for other variables/fields */

// Adding where statement
if (!empty($whr)) {
    $sql .= " WHERE ";
    $sql .= implode(' AND ', $whr);
}

// Now execute the query and fetch results

Другие вопросы по теме