我正在尝试制作简单的搜索功能,但出现错误我找不到原因。
我检查了结果 SQL 查询是否正确生成。但是,执行此准备好的语句会导致未知故障。为什么此 execute()
返回 false?
public function searchConcept(string $cplx = '', string $name = '', string $desc = '', int $page = 0)
{
$SQL = 'select * from concept ';
$SQL_criteria = array();
// Criteria
if($cplx) { $SQL_criteria[] = 'cplx:cplx'; }
if($name) { $SQL_criteria[] = 'name like :name'; }
if($desc) { $SQL_criteria[] = 'description like :desc'; }
if($SQL_criteria) { $SQL .= 'where '.implode(' and ', $SQL_criteria).' '; }
$SQL .= 'limit :page, 15';
$stmt = $this->db->prepare($SQL);
if($cplx) { $stmt->bindValue(':cplx', $cplx); }
if($name) { $stmt->bindValue(':name', '%'.$name.'%'); }
if($desc) { $stmt->bindValue(':desc', '%'.$desc.'%'); }
$stmt->bindValue(':page', $page*15);
if($stmt->execute()) {
$rst = $stmt->fetchAll(\PDO::FETCH_OBJ);
return $rst;
} else {
throw new DBRFError();
}
}
DBRFError 是我制作的自定义错误类。
#加 1。####
我认为 cplx:cplx
无关紧要。 $cplx
的值类似于“>5”。
我实际上并没有测试这种情况,但我只是在没有 cplx block 的情况下进行了测试,但也导致了错误。
添加 2。####
我只是找到问题的根源。
$SQL .= 'limit :page, 15';
它会导致错误。我这样做是为了分页。没有这个 block ,代码运行良好。但是,我不明白为什么。
最佳答案
您的 where 子句中缺少“=”。这是固定的代码:
if($cplx) { $SQL_criteria[] = 'cplx=:cplx'; }
关于php - PDO,在我准备好的陈述中找不到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40701521/