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のためにこれを行う。このブロックがなければ、コードはうまく機能します。しかし、なぜ私は理解できません。
結果のSQLを印刷して手動で実行するとどうなりますか? – krasipenkov
しました。私はこの問題の原因を発見したと思う。 – GatesPlan