Codeigniter — Active Record How To Where (условие кодирования ИЛИ)

$this->db->select('*');
$this->db->from('user');
$this->db->where("Password",$password);
$this->db->where("Status",true);
$this->db->where("(Username = '$username' OR Email = '$email')");
$query=$this->db->get();

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

Функциональность: запрос должен возвращать запись, когда пароль = пароль и статус = true и (имя пользователя = имя пользователя или адрес электронной почты = адрес электронной почты).

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

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

Пожалуйста помоги! Спасибо, я продвинулся

-1

Решение

Как сказано в руководстве пользователя, предоставленном CodeIgniter

Если вы используете несколько вызовов функций, они будут связаны между собой и AND между ними:

$this->db->where('name', $name);
$this->db->where('title', $title);
$this->db->where('status', $status);

Приведенный выше код будет генерировать SQL следующим образом:

WHERE name = 'Joe' AND title = 'boss' AND status = 'active'

И если вы хотите использовать OR в условии, вы должны попробовать это:

$this->db->where('name !=', $name);
$this->db->or_where('id >', $id);

И код выше производит:

WHERE name != 'Joe' OR id > 50

Также вы можете выполнить инструкцию SQL следующим образом:

$this->db->query('YOUR QUERY HERE');

Чтобы предотвратить внедрение SQL, вы можете сделать следующее:

$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
$this->db->query($sql, array(3, 'live', 'Rick'));
1

Другие решения

Вы можете достичь желаемых результатов, используя следующее. Здесь то, что мы собираемся сделать, это сначала проверить ввод пользователя, то есть это электронное письмо или имя пользователя. Если это имя пользователя, то проверьте имя пользователя или, если электронная почта, отметьте в столбце имена пользователей.

$this->db->select('*');
$this->db->from('user');
$this->db->where("Password",$password);
$this->db->where("Status",true);

$pattern = "(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)";

if(preg_match($pattern,$email))//check if entered value in email field is email
$this->db->where('email',$email);

else   // you can verify here username if it is any standard format
$this->db->where('username',$email);

$query = $this->db->get();

этот запрос очень эффективен, так как экономит время выполнения SQL-запроса.

0