Php PDO、can和x27;I don’我在事先准备好的陈述中找不到什么错

Php PDO、can和x27;I don’我在事先准备好的陈述中找不到什么错,php,mysql,pdo,Php,Mysql,Pdo,我试图使简单的搜索功能,但有一个错误,我无法找到原因 我检查了SQL查询结果是否正确生成。但是,执行此准备好的语句会导致未知故障。为什么此execute()返回false public function searchConcept(string $cplx = '', string $name = '', string $desc = '', int $page = 0) { $SQL = 'select * from concept '; $SQL_criteria = arr

我试图使简单的搜索功能,但有一个错误,我无法找到原因

我检查了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块的情况下测试,并且导致了一个错误

# 加2#### 我只是找到了问题的根源。
$SQL.='limit:page,15'它会导致错误。我这样做是为了寻呼。如果没有这个块,代码工作得很好。但是,我不明白为什么。

您的where子句中缺少“=”。这是固定代码:

 if($cplx) { $SQL_criteria[] = 'cplx=:cplx'; }

如果打印生成的sql并手动执行会怎么样?我是这样做的。我想我找到了问题的根源。