Начал изучать PHP и базы данных, столкнулся с банальным вопросом. На сайте игр есть форма, скажем, с 3-мя категориями: год выпуска, разработчик и страна разработки. У меня выходит БД на MySQL следующего вида:
CREATE TABLE IF NOT EXISTS `games` (
`id` int(255) NOT NULL,
`game_name` varchar(50) NOT NULL,
KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `games` (`id`, `game_name`) VALUES
(1, 'Grand Theft Auto Vice City'),
(2, 'Counter Strike 1.6'),
(3, 'Fallout 2'),
(4, 'Minecraft');
CREATE TABLE IF NOT EXISTS `attributes` (
`attr_id` int(50) NOT NULL,
`attribute_name` varchar(255) NOT NULL,
KEY (`attr_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `attributes` (`attr_id`, `attribute_name`) VALUES
(1, 'release'),
(2, 'developer'),
(3, 'country');
CREATE TABLE IF NOT EXISTS `values` (
`entity_id` int(255) NOT NULL,
`attribute_id` int(50) NOT NULL,
`value` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `values` (`entity_id`, `attribute_id`, `value`) VALUES
(1, 1, '2002'),
(1, 2, 'Rockstar'),
(1, 3, 'USA'),
(2, 1, '2000'),
(2, 2, 'Valve'),
(2, 3, 'USA'),
(3, 1, '1998'),
(3, 2, 'Black Isle Studios'),
(3, 3, 'USA'),
(4, 1, '2011'),
(4, 2, 'Mojang'),
(4, 3, 'Sweden');
ALTER TABLE `values`
ADD CONSTRAINT `values_ibfk_1` FOREIGN KEY (`attribute_id`) REFERENCES `attributes` (`attr_id`),
ADD CONSTRAINT `values_ibfk_2` FOREIGN KEY (`entity_id`) REFERENCES `games` (`id`);
Фильтр обрабатывает submit.php. Сейчас он такой:
<?php
$pdo = new PDO('mysql:host=localhost;dbname=games_db', 'root', '');
$opts = $_POST['filterOpts'];
$qMarks = str_repeat('?,', count($opts) - 1) . '?';
$statement = $pdo->prepare('SELECT games.game_name FROM games INNER JOIN values ON attribute_id = attributes.attr_id WHERE value IN ($qMarks)');
$statement->execute($opts);
$results = $statement->fetchAll(PDO::FETCH_ASSOC);
$json = json_encode($results);
echo($json);
?>
Не совсем понимаю принцип фильтрации, отсюда и ошибка. Хочется самому понять принцип в тех же онлайн-магазинах. Вопрос баян, перерыто много, но до сих пор чего-то не хватает. Буду благодарен за любой совет или помощь.