Проблемът вероятно е, че $this->phone
е празен, когато стартирате заявката.
В този случай заявката ще бъде SELECT * FROM [...] OR WHERE phone LIKE '%%'
който винаги ще връща всичко.
Решение:пропуснете критериите за телефон, ако не са предоставени или (предупреждение за хакване! ) използвайте стойност, която никога няма да се появи в тази колона.
Друг начин да направите това е да промените заявката на нещо като
SELECT *
FROM directory
WHERE name LIKE :name
AND :name_provided = 1
OR phone LIKE :phone
AND :phone_provided = 1
И след това свържете :phone_provided
до 1, ако $this->phone
е дефиниран, 0 в противен случай. По същия начин с :name_provided
.