У меня есть таблица пользователей, и я хочу, чтобы иметь возможность фильтровать таблицу по столбцу электронной почты, поэтому я могу видеть всех пользователей с учетными записями «gmail.com», например.
Мой текущий запрос fpdo выглядит так:
$filter_email = trim($_GET['email']); $fpdo->from('users') ->where('users.email LIKE "%' . $filter_email . '%"') ->fetchAll();
Когда я устанавливаю $filter_email
в @ b , все работает нормально, а FluentPDO генерирует этот оператор SQL:
SELECT users.* FROM users WHERE users.email LIKE "%a@b%"
Но если я ищу @ bc FluentPDO пытается найти таблицу b
и ошибки
SELECT users.* FROM users LEFT JOIN b ON b.id = users.b_id WHERE users.email LIKE "%a@bc%"
Я не знаю, как FluentPDO видит bc
как таблицу для присоединения или как ее остановить.
РЕШЕНИЕ
Спасибо, главным образом, за то, что он был deceze, а также для aynber, вот рабочее решение:
$filter_email = '%'.trim($_GET['email']).'%'; $fpdo->from('users') ->where('users.email LIKE ?',$filter_email) ->fetchAll();
Мой фактический запрос проверяет три разных поля электронной почты, но использует три ?
и добавление $filter_email
три раза отлично работает:
->where( '(users.email1 LIKE ? OR users.email2 LIKE ? OR users.email1 LIKE ?)', $filter_email, $filter_email, $filter_email )