2016-07-07 3 views
0

Я создаю сайт, где мне нужно построить запрос mysql на основе пользовательского ввода, где необходимо изменить не только значения, но и сам запрос. Что у меня есть это далеко условное решение, если-то еще, который работает, но очень грязный ...Рекомендации по условным запросам mysql

пример:

public function getUsers($options){ 
    $query = "SELECT * FROM Users"; // basic query 
    if($options->getAdminsOnly()){ 
     $query .=" WHERE type='admin' "; 
    } 
    if($options->getOrderBy() !=null){ 
     $query .=" ORDER BY ".$options->getOrderBy(); 
    } 
    if($options->groupBy() !=null){ 
     $query .=" GROUP BY ".$options->groupBy(); 
    } 
    if($options->getLimit() !=null){ 
     $query .=" LIMIT ".$options->getLimit(); 
    } 
    if($options->getOffset() !=null){ 
     $query .=" OFFSET ".$options->getOffset(); 
    } 
    .... 
    .... 
} 

Это становится даже грязнее в случае объединений и т.д ... Есть более чистый способ сделать это?

ответ

0

Существует уже множество библиотек объектно-реляционного сопоставления (ORM), которые помогут вам построить SQL-запрос. Я бы не изобретать колесо, имеют вид:

Good PHP ORM Library?

+0

Великий, не могли бы вы предоставить некоторые примеры того, как я мог бы использовать ORM, чтобы избежать, если-то еще решение? спасибо ... –

+0

@DanielValland - Это не поможет с условиями if-else, но не позволит вам добавлять или добавлять на различные разделы (скажем, вы хотите добавить второй ГДЕ после того, что было добавлено. проверка строки с помощью библиотеки, способной анализировать SQL, вам не повезло. Однако вы можете уменьшить количество используемого кода. Поскольку ваш чек состоит в том, чтобы увидеть, является ли строка возврата пустым, почему бы не проверить ваши параметры Object ? $ options-> getQuery() 'где функция getQuery выполняет пустые проверки отдельно? – Jim

Смежные вопросы