Problemet är förmodligen att $this->phone
är tom när du kör frågan.
I så fall blir frågan SELECT * FROM [...] OR WHERE phone LIKE '%%'
som alltid kommer att returnera allt.
Lösning:utelämna telefonkriterierna om de inte tillhandahålls eller (hack alert! ) använd ett värde som aldrig kommer att förekomma i den kolumnen.
Ett annat sätt att göra detta är att ändra frågan till något liknande
SELECT *
FROM directory
WHERE name LIKE :name
AND :name_provided = 1
OR phone LIKE :phone
AND :phone_provided = 1
Och bind sedan :phone_provided
till 1 om $this->phone
definieras, annars 0. Likaså med :name_provided
.