Problém je pravděpodobně v tom $this->phone
je při spuštění dotazu prázdný.
V takovém případě bude dotaz SELECT * FROM [...] OR WHERE phone LIKE '%%'
která vždy vše vrátí.
Řešení:vynechejte kritéria pro telefon, pokud nejsou uvedena, nebo (upozornění na hackování! ) použijte hodnotu, která se v tomto sloupci nikdy nevyskytuje.
Dalším způsobem, jak toho dosáhnout, je změnit dotaz na něco jako
SELECT *
FROM directory
WHERE name LIKE :name
AND :name_provided = 1
OR phone LIKE :phone
AND :phone_provided = 1
A pak svažte :phone_provided
na 1, pokud $this->phone
je definováno, 0 jinak. Podobně s :name_provided
.