Problemet er sandsynligvis den $this->phone
er tom, når du kører forespørgslen.
I så fald vil forespørgslen være SELECT * FROM [...] OR WHERE phone LIKE '%%'
som altid vil returnere alt.
Løsning:Udelad telefonkriterierne, hvis de ikke er angivet, eller (hack alert! ) brug en værdi, der aldrig vil forekomme i den kolonne.
En anden måde at gøre dette på er at ændre forespørgslen til noget lignende
SELECT *
FROM directory
WHERE name LIKE :name
AND :name_provided = 1
OR phone LIKE :phone
AND :phone_provided = 1
Og bind derefter :phone_provided
til 1 hvis $this->phone
er defineret, ellers 0. Ligeledes med :name_provided
.