Это явно неверно:
$this->db->where('user_auth' & $level);
Во-первых, у вас нет .
для объединения строковой части в нестроковую.Даже если бы у вас было 'user_auth' . & $level
, это все равно было бы неправильно, поскольку оператор &
должен рассматриваться как любой оператор, такой как <
, >
, <>
или !=
и т. Д. В этом случае он также должен бытьстрока.В нынешнем виде это, вероятно, синтаксическая (или подобная ошибка) синтаксического анализа, простой test сообщает мне следующее:
Warning : встречается нечисловое значениев [...] [...] в строке 5
Поэтому попробуйте это вместо:
$this->db->where('user_auth & '.(int)$level);
AПростой пример проясняет это:
#this is wrong
$sql = "SELECT * FROM table WHERE user_auth" & 1;
#this is correct
$sql = "SELECT * FROM table WHERE user_auth & 1";
Для этого парня вы можете просто преобразить level
в INT, это должно хорошо его дезинфицировать, поскольку это просто целочисленное значение.Я должен убедиться, что все понимают, что дезинфекция всегда важна.Подготовленные запросы предпочтительнее, но в случаях, когда это простой INT (скорее всего, извлеченный из констант класса), мы будем в порядке, просто приведем его, поскольку все, что не является INT, просто становится 0
, что в худшем случае не даст никаких результатов..
Суть в том, что даже при использовании констант класса в запросе его следует очищать.Особенно, если эта константа передается как аргумент функции.Это потому, что функцию можно использовать с «нечистыми» данными, и у вас нет возможности узнать, безопасно ли это, не просматривая много кода.Если вы очистите его по запросу, который, как вы знаете, всегда о нем заботятся и т. Д.
Наслаждайтесь!