【问题标题】:Cannot get data from SQLite database无法从 SQLite 数据库获取数据
【发布时间】:2019-10-13 06:58:47
【问题描述】:

我正在尝试运行以下查询:

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

如果categorysearchterm 均未找到,则解析为:

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();

当没有找到searchtermcategory 时,返回记录。但是此代码中出现的任何其他情况都不会返回任何记录,即使它们在“DB Browser for SQLite”中运行时出现

编辑: 我试过硬编码

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

没有返回任何东西

【问题讨论】:

    标签: php sql sqlite pdo


    【解决方案1】:

    您可能会发现,当您只使用一个或其他术语时,您会遇到错误,类似于尝试绑定到不存在的变量。
    这(我认为)取决于您有条件地构建 SQL,您可能有 :searchterm:category 或两者兼有 - 但您总是尝试绑定到它们。

    因此,如果有要绑定的值 - 然后单独绑定每个术语...

    if(!empty($search_term)){
        $sqlGetFilms->bindParam(':searchterm', $sqlSearchTerm);
    } 
    if(!empty($category)) {
        $sqlGetFilms->bindParam(':category', $category);
    } 
    

    【讨论】:

      猜你喜欢
      • 2018-05-28
      • 2012-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-04
      相关资源
      最近更新 更多