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';
它導致錯誤。我這樣做是爲了分頁。沒有這個塊,代碼運行良好。但是,我不明白爲什麼。
如果您打印生成的sql並手動執行它會怎麼樣? – krasipenkov
我做到了。我想我發現了問題的根源。 – GatesPlan