У меня есть приложение, которое отображает список файлов из таблицы базы данных. Я хотел бы, чтобы пользователь мог создавать группу, выбирая опции, которые будут фильтровать список файлов и отображать только те, которые соответствуют. Параметры группы добавляются в другую таблицу для последующего использования.Создать динамический подготовленный MYSQLi оператор в PHP
Вот варианты: name
year
type
room
day
time
Все они, кроме name
являются необязательными и могут быть оставлены пустыми пользователем. Некоторые из параметров могут содержать несколько значений, разделенных ,
.
Вот мой код, чтобы добавить эту информацию:
if ($addGrp = $m->prepare("SELECT * FROM pro_files WHERE userid=?, name=? ...")) {
$addGrp->bind_param('is ...',$userid, $name ...;
}
Для справки, чтобы выбрать эти dymanic столбцы Я буду использовать:
WHERE room in (g23,f43,g43) AND type in ('pptx,ppt,ai,pdf')
и переменные используются для связывания их являются запятая разделенные значения как таковые (сгенерированные на основе того, что пользователь выбирает, переменная не будет существовать, если пользователь ничего не выбрал):
$room = 'g23,f43,g43';
$type = 'pptx,ppt,ai,pdf';
Используя старый метод MYSQL, я мог бы просто создать строку запроса без проблем. Как создать динамический запрос, когда у меня также есть линия bind_param
?
Для демонстрации я добавил ...
, где мне нужно динамически генерировать запрос.
Я не могу использовать PDO из-за того, что в остальной части приложения в настоящее время используется MYSQLi, работа будет слишком большой.
В качестве альтернативы можно ли использовать подстановочный знак в разделе IN? В этом случае я мог бы сделать '' = '*'
в PHP. Однако room in ('*')
не работает.
Вы должны рассмотреть структуру или [ORM] (https://en.wikipedia.org/wiki/Object-relational_mapping), которая уже охватывает такой прецедент. – Gumbo