Das Problem ist wahrscheinlich das $this->phone
ist leer, wenn Sie die Abfrage ausführen.
In diesem Fall lautet die Abfrage SELECT * FROM [...] OR WHERE phone LIKE '%%'
die immer alles zurückgibt.
Lösung:Lassen Sie die Telefonkriterien weg, falls nicht vorhanden, oder (Hack-Alarm! ) einen Wert verwenden, der niemals in dieser Spalte vorkommt.
Eine andere Möglichkeit, dies zu tun, besteht darin, die Abfrage in etwas wie
zu ändernSELECT *
FROM directory
WHERE name LIKE :name
AND :name_provided = 1
OR phone LIKE :phone
AND :phone_provided = 1
Und binden Sie dann :phone_provided
auf 1, wenn $this->phone
definiert ist, sonst 0. Ebenso mit :name_provided
.