Это на самом деле объясняется в ссылке, которую Вы предоставили:
Если вы используете базу данных, 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
. Но общим ключевым словом таких случаев является, вероятно, составная заявка.
Вы всегда должны избегать значений и идентификаторов, если вы предварительно не обработали вход. – shmosel
Единственное исключение - когда ни один из входов не поступает от пользователя. – DFriend
@ shmosel, DFriend, спасибо. Теперь я понял. –