Каковы преимущества использования Query Builders - PullRequest
2 голосов
/ 27 августа 2011

Прошу прощения за мое невежество по этому вопросу, но какой смысл использовать Query Builders?Разве не намного проще написать одну строку SQL вместо 3 строк кода AR:

$this->db->query(" SELECT title, contents FROM data WHERE id = 2 ");

Вместо:

$this->db->select('title, contents');
$this->db->from('data');
$this->db->where('id', 2);

Мне это кажется более многословным, ноопять же, я ничего не знаю о Query Builders, чтобы я мог что-то упустить.Очень хотел бы знать, в чем заключаются преимущества.

Ответы [ 3 ]

2 голосов
/ 29 августа 2011

Я не вижу никакой пользы вообще.
Так сказал Дален, "это не так уж и много".А с 10-ю ограничением предложения where AR становится еще более запутанным и беспорядочным, что делает вас совершенно не в состоянии понять смысл запроса.И пока нет никаких объединений!

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

2 голосов
/ 27 августа 2011

Если вам нужно программно построить запрос, активные записи CodeIgniter гораздо удобнее, чем обычный текст,

$id = 2;

//with CodeIgniter's Active Record
$this->db->select('title, contents');
$this->db->from('data');
if(isset($id))
   $this->db->where('id', $id);

//without CodeIgniter's Active Record
if(isset($id))
   $where = " WHERE id = {$id}";
$this->db->query(" SELECT title, contents FROM data".$where);

Хорошо, это не так уж и сильно, но что, если у вас 10 ограничений наусловие?

Более того, Active Record CodeIgniter создает строку правильным образом (с заполнителями ?) в соответствии с данными, которые вы передаете, т.е. вам не нужно будет вставлять ' вручную в запрос.

РЕДАКТИРОВАТЬ

@ Col.Шрапнель сказал, что с Active Record CodeIgniter нет никаких преимуществ, так как я не согласен с ним, я пытаюсь закрепить свой тезис на другом примере:

Давайте сделаем пример для оператора INSERT:

$array = array('A'=>'aaaa','B'=>'bbbb','C'=>'cccc');

//without CodeIgniter's Active Record
$query = "INSERT INTO my_table (";
$query.= implode(',',array_keys($array)) .')';
$query.= ......

//with CodeIgniter's Active Record
$this->db->insert('my_table',$array);
0 голосов
/ 29 августа 2011

Стиль программирования, на который вы жалуетесь, должен быть невосприимчив к атакам SQL-инъекций .Это предполагает, что интерфейс БД, с которым вы разговариваете, делает разумные кавычки и экранирование, конечно.

...