2016-11-20 5 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';エラーが発生します。私はpagenationのためにこれを行う。このブロックがなければ、コードはうまく機能します。しかし、なぜ私は理解できません。

+0

結果のSQLを印刷して手動で実行するとどうなりますか? – krasipenkov

+0

しました。私はこの問題の原因を発見したと思う。 – GatesPlan

答えて

2

where句に '='がありません。これは固定コードです

if($cplx) { $SQL_criteria[] = 'cplx=:cplx'; } 
関連する問題