Php 无法从SQLite数据库获取数据
我正在尝试运行以下查询:Php 无法从SQLite数据库获取数据,php,sql,sqlite,pdo,Php,Sql,Sqlite,Pdo,我正在尝试运行以下查询: 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
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的DB浏览器”,则返回正确的字段
但当尝试在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();
当未找到任何searchterm
和category
时,将返回记录。但此代码中出现的任何其他情况都不会返回任何记录,即使它们在“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
没有返回任何内容您可能会发现,当您只使用一个或其他术语时,您会得到一个错误,这类似于试图绑定到一个不存在的变量。
这(我认为)取决于您有条件地构建SQL的地方,您可能有
:searchterm
或:category
或两者都有,但您总是尝试绑定到这两个
因此,如果有一个值需要绑定,则分别绑定每个术语
if(!empty($search_term)){
$sqlGetFilms->bindParam(':searchterm', $sqlSearchTerm);
}
if(!empty($category)) {
$sqlGetFilms->bindParam(':category', $category);
}