2017-01-24 2 views
1

Ссылаясь на CodeIgniter Query Builder., когда мне следует избегать запроса sql

Есть много функций, которые принимают необязательный $escape параметр, определяемый как:

$ побеге (BOOL) - Независимо от того, чтобы избежать значения и идентификаторы

В какой ситуации должны или не должны бежать ?

+0

Вы всегда должны избегать значений и идентификаторов, если вы предварительно не обработали вход. – shmosel

+0

Единственное исключение - когда ни один из входов не поступает от пользователя. – DFriend

+0

@ shmosel, DFriend, спасибо. Теперь я понял. –

ответ

3

Это на самом деле объясняется в ссылке, которую Вы предоставили:

Если вы используете базу данных, CodeIgniter ускользает запросы для, вы можете предотвратить побег контента, передавая необязательный третий аргумент, и установить его до ЛОЖЬ.

Это значит; например MySQL поддерживается и избежит:

$this->db->having('user_id', 45); // Produces: HAVING `user_id` = 45 in some databases such as MySQL 

для отключения его:

$this->db->having('user_id', 45, FALSE); // Produces: HAVING user_id = 45 

Но ваш вопрос был, когда использовать FALSE аргумент права? Итак, позвольте мне дать вам сценарий использования FALSE аргумента из the old documentation:

$this->db->select('(SELECT SUM(payments.amount) FROM payments WHERE payments.invoice_id=4') AS amount_paid', FALSE); 

Это (FALSE) полезно, если вам нужно соединение оператора выбора.

Без FALSE он будет производить:

SELECT `(SELECT SUM(payments.amount) FROM payments WHERE payments.invoice_id=4` 

но с FALSE:

SELECT (SELECT SUM(payments.amount) FROM payments WHERE payments.invoice_id=4 

и нужный случай является последним. Использование FALSE просто удаляет обратные элементы (`).

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

Я предпочитаю писать так:

<?php 
    . 
    . 
    $whatever_query = $this->db->get_compiled_select(); 
    $query = $this->db->query('SELECT (SELECT SUM(payments.amount) FROM payments WHERE payments.invoice_id=4 '.$whatever_query); 
?> 

Но есть люди предпочитают использовать: $this->db->select() и поэтому есть FALSE аргумент.

Кстати, это не проблема $this->db->select(). При вызове других функций построителя запросов может потребоваться много аргументов FALSE. Но общим ключевым словом таких случаев является, вероятно, составная заявка.

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