bindParam ломает SQL-запрос - PullRequest
1 голос
/ 12 мая 2019

У меня есть запрос, который я строю так:

$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 0
      ";

Кажется, это работает правильно, я проверил переменную и запустил ее в моей СУБД, и она работает.

Итак, я связываю параметры (включая привязки параметров для другого запроса):

  if($search_term != ''){
    $sqlGetFilms->bindParam(':searchterm', $sqlSearchTerm, PDO::PARAM_STR);
    $sqlCountFilms->bindParam(':searchterm', $sqlSearchTerm, PDO::PARAM_STR);
  }

  if($category != ''){
    $sqlGetFilms->bindParam(':category', $category, PDO::PARAM_STR);
    $sqlCountFilms->bindParam(':category', $category, PDO::PARAM_STR);
  }

  if($page != ''){
    $sqlGetFilms->bindParam(':page', $page, PDO::PARAM_INT);
  }

Результат, который я получаю при выполнении этого, - ничто.

Когда я удаляю bindParams и заменяюпараметры в запросе со статическими значениями, запрос возвращает результаты.

Итак, почему bindParams нарушает мой запрос?

РЕДАКТИРОВАТЬ: Это SQL-операторы для 1. нет $search_termили category 2. оба $search_term и $category:

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


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 :searchterm
    AND
      nfc_category.name = :category LIMIT 10 OFFSET 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...