2015-06-01 2 views
1

Я создаю систему фильтров для интернет-магазина на основе категорий. Эти категории сохраняются с каждой частью контента в базе данных. Категории являются intergers.mysql regexp в подготовленной заявленной проблеме

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

mysql> select id, name, category, url, price from content where category REGEXP '1|2|3|4|5|6';

Это возвращает

+----+------------+----------+--------------------------+-------+ 
| id | name  | category | url      | price | 
+----+------------+----------+--------------------------+-------+ 
| 1 | landschap1 |  2 | Ideal-landscape.jpg  | 20 | 
| 2 | landschap1 |  2 | landscape-Photograps.jpg | 20 | 
| 4 | landschap1 |  2 | landscape.jpg   | 25 | 
| 5 | bunny  |  4 | bunny.mov    | 100 | 
+----+------------+----------+--------------------------+-------+ 

Когда это попытка в PHP Однако я получаю ошибку синтаксиса или нарушение прав доступа. Поскольку пользователь базы данных, который использует код, не имеет недостающих разрешений, это должно быть синтаксической ошибкой.

Запрос Я пытаюсь выполнить:

if(empty($_SESSION['filter'])){ 
    $halfFilt = array(1,2,3,4,5,6); 
$filter = implode('|', $halfFilt); 
//If filter halfFilt is empty, assume no filter is selected. 

$sql = "SELECT * FROM content WHERE id=:id AND WHERE category REGEXP :filter"; 
$sth->bindParam(':id', $id, PDO::PARAM_INT); 
$sth->bindParam(':filter', $filter); 
$sth->execute(); 
$results = $sth->fetch(PDO::FETCH_ASSOC); 
return $results; 

Когда я пытаюсь выполнить этот запрос, это ошибка он бросает:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE category REGEXP '1|2|3|4|5|6'' at line 1' in /var/www/portfolio/photoshop/include/database.php:89

ответ

1

Проблема не связана с регулярное выражение. Вы случайно положите дополнительный WHERE в ваш запрос. Замените его так, и мы надеемся, что он будет работать:

$sql = "SELECT * FROM content WHERE id=:id AND category REGEXP :filter";