как лучше всего запросить базу данных в fuelphp?

У меня есть список требований к выбору базы данных запросов

  1. Безопасность
  2. Гибкость
  3. Быстро

а это база данных функции запроса в Fuelphp

  1. ORM (реляционное сопоставление объектов)

  2. Класс БД (прямой запрос)

  3. Формирование запросов

Моя проблема

  1. Когда я использую ORM Mapper, у меня возникают проблемы с пунктом flexible. Я прочитал это и это, в котором говорится, что ORM не может выбирать по полю таблицы, ORM может получить весь столбец в таблице, и если таблица соединения будет много данных передается, но ORM - это высокий уровень безопасности, и я сейчас не знаю, быстро или нет, может быть, кто-то может объяснить, но я думаю, что это будет медленно, потому что ORM извлекает все данные, это только мое мнение.

  2. Когда я использую Direct Query, у меня возникают проблемы с безопасностью, потому что возможна SQL-инъекция, но с Direct Query мы можем настроить базу данных запросов, и я думаю, что скорость будет выше, чем ORM.

  3. Когда я использую построение запросов, у меня возникают проблемы, когда я хочу присоединиться к двум таблицам или более, эта функция по-прежнему недоступна в Fuelphp, но с безопасностью построителя запросов лучше, чем с прямым запросом, и скорость, я думаю, увеличится.

Хорошо, это только мое мнение, на самом деле я хочу использовать ORM, потому что я предпочитаю безопасность больше, чем что-либо другое, что, я думаю, очень важно.

Мой вопрос

  1. Что вы предлагаете для этой проблемы?

person viyancs    schedule 16.08.2012    source источник


Ответы (1)


  1. Да, ORM обычно немного медленнее по своей природе. Однако, как вы говорите, именно из-за гибкости может быть жертва производительностью. ORM имеет свое применение и полезен для определенных сценариев, которые гораздо более подробно документированы по всему Интернету, в том числе по ссылке, которую вы указали в своем вопросе, поэтому я оставлю подробное описание преимуществ и подводных камней.

  2. Прямые запросы могут быть подвержены SQL-инъекциям, но вы можете избежать их и сделать их безопасными самостоятельно. В качестве базового примера (ниже) вы можете передать следующее в класс DB. Прямые запросы хороши во времена, когда ORM и построитель запросов не в состоянии сгенерировать нужный вам SQL. Однако использование прямых запросов означает, что вы не обязательно сможете переключиться на другой движок БД (например, с MySQL на Mongo), в отличие от ORM или построителя запросов. По этой причине лично я избегаю прямых запросов.

    $query = sprintf("SELECT * FROM table WHERE name = '%s'", DB::escape($yourstring));

  3. Построитель запросов хорош для выполнения запросов, на которые модель ORM не способна, или когда написание модели является излишним. При компиляции SQL из него возникают небольшие накладные расходы, но обычно ими можно пренебречь. Построитель запросов может объединять неограниченное количество таблиц. Вам просто нужно вызвать функции join() и on() более одного раза. Например

    DB::select('*')->from('table')

    ->join('table2', 'right')->on('table2.column', '=', 'table.column')

    ->join('table3', 'right')->on('table3.column', '=', 'table.column')

Вы также можете сделать столько звонков on(), сколько захотите.

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

person Ben Swinburne    schedule 16.08.2012