Ich versuche, einfache Suchfunktion zu machen, aber es gibt einen Fehler, den ich nicht warum finden kann.PDO, kann nicht finden, was in meiner vorbereiteten Aussage falsch ist
Ich überprüfte das Ergebnis SQL-Abfrage wird ordnungsgemäß generiert. Führen Sie diese vorbereitete Anweisung jedoch aus, um einen unbekannten Fehler zu verursachen. Warum gibt execute()
false zurück?
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 ist benutzerdefinierte Fehlerklasse, die ich gemacht habe.
#hinzufügen 1. #### Ich denke cplx:cplx
keine Rolle spielt. $cplx
nimmt seinen Wert etwas wie "> 5". Ich habe diese bestimmte Situation nicht wirklich getestet, aber ich habe gerade ohne cplx Block getestet und auch einen Fehler verursacht.
Hinzufügen 2. #### Ich finde nur den Ursprung des Problems. $SQL .= 'limit :page, 15';
es verursacht den Fehler. Ich mache das für die Pagenation. Ohne diesen Block funktioniert Code gut. Ich kann jedoch nicht verstehen warum.
Was ist, wenn Sie Ihre resultierende SQL drucken und manuell ausführen? – krasipenkov
tat ich. und ich denke, ich habe einen Ursprung des Problems gefunden. – GatesPlan