Не удается получить данные из базы данных SQLite - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь выполнить следующий запрос:

SELECT nfc_film.title, nfc_film.film_id, nfc_film.description, nfc_film.release_year, nfc_film.rating, nfc_film.last_update, nfc_category.name
  FROM nfc_film
JOIN nfc_film_category
  ON nfc_film.film_id = nfc_film_category.film_id
JOIN nfc_category
  ON nfc_film_category.category_id = nfc_category.category_id  LIMIT 10 OFFSET 0

Это работает, если я помещаю его в «Браузер БД для SQLite», возвращаются правильные поля.

Но при попытке реализовать это в PHP это не работает:

$filmQuery = "
SELECT nfc_film.title, nfc_film.film_id, nfc_film.description, nfc_film.release_year, nfc_film.rating, nfc_film.last_update, nfc_category.name
  FROM nfc_film
JOIN nfc_film_category
  ON nfc_film.film_id = nfc_film_category.film_id
JOIN nfc_category
  ON nfc_film_category.category_id = nfc_category.category_id ";

if($search_term && $category){
  $filmQuery .= "
  WHERE
    nfc_film.title LIKE :searchterm
  AND
    nfc_category.name = :category";
} else if ($search_term && !$category) {
  $filmQuery .= "
  WHERE
    nfc_film.title LIKE :searchterm";
} else if (!$search_term && $category) {
  $filmQuery .= "
  WHERE
    nfc_category.name = :category";
}

$filmQuery .= " LIMIT 10 OFFSET :page";

Если не найдено ни category, ни searchterm, это разрешается до:

SELECT nfc_film.title, nfc_film.film_id, nfc_film.description, nfc_film.release_year, nfc_film.rating, nfc_film.last_update, nfc_category.name
      FROM nfc_film
    JOIN nfc_film_category
      ON nfc_film.film_id = nfc_film_category.film_id
    JOIN nfc_category
      ON nfc_film_category.category_id = nfc_category.category_id  LIMIT 10 OFFSET :page

Затем я готовлю, связываю и выполняю запрос:

$sqlGetFilms = $dbConn->prepare($filmQuery);
$sqlGetFilms->bindParam(':searchterm', $sqlSearchTerm);
$sqlGetFilms->bindParam(':category', $category);
$sqlGetFilms->bindParam(':page', $page);
$sqlGetFilms->execute();
$query = $sqlGetFilms->fetchAll();

При обнаружении noth searchterm и category записи возвращаются. Но любая другая ситуация, которая появляется в этом коде, не возвращает никаких записей, даже если они появляются при запуске в «Браузере БД для SQLite»

EDIT: Я попробовал жесткое кодирование

SELECT nfc_film.title, nfc_film.film_id, nfc_film.description, nfc_film.release_year, nfc_film.rating, nfc_film.last_update, nfc_category.name
      FROM nfc_film
    JOIN nfc_film_category
      ON nfc_film.film_id = nfc_film_category.film_id
    JOIN nfc_category
      ON nfc_film_category.category_id = nfc_category.category_id 
      WHERE
        nfc_film.title LIKE '%k%' LIMIT 10 OFFSET 0

и ничего не было возвращено

1 Ответ

0 голосов
/ 27 мая 2019

Вы можете обнаружить, что, когда вы используете только один или другой термин, вы получаете ошибку, которая напоминает попытку связывания с несуществующей переменной.
Это (я думаю) до того места, где вы условно строитеSQL, у вас может быть :searchterm или :category или и то и другое - НО вы всегда пытаетесь связать их обоих.

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

if(!empty($search_term)){
    $sqlGetFilms->bindParam(':searchterm', $sqlSearchTerm);
} 
if(!empty($category)) {
    $sqlGetFilms->bindParam(':category', $category);
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...