2016-11-20 46 views
1

我試圖做出簡單的搜索功能,但出現錯誤,我無法找到原因。PDO,在我準備好的聲明中找不到最新錯誤

我檢查了結果正確地生成了SQL查詢。但是,執行此準備好的語句會導致未知失敗。爲什麼​​返回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';它導致錯誤。我這樣做是爲了分頁。沒有這個塊,代碼運行良好。但是,我不明白爲什麼。

+0

如果您打印生成的sql並手動執行它會怎麼樣? – krasipenkov

+0

我做到了。我想我發現了問題的根源。 – GatesPlan

回答

2

您在where子句中缺少'='。這是固定代碼:

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