Problem prawdopodobnie polega na tym, że $this->phone
jest pusta po uruchomieniu zapytania.
W takim przypadku zapytaniem będzie SELECT * FROM [...] OR WHERE phone LIKE '%%'
który zawsze zwróci wszystko.
Rozwiązanie:pomiń kryteria numeru telefonu, jeśli nie zostały podane lub (ostrzeżenie o hakowaniu! ) użyj wartości, która nigdy nie pojawi się w tej kolumnie.
Innym sposobem na to jest zmiana zapytania na coś takiego jak
SELECT *
FROM directory
WHERE name LIKE :name
AND :name_provided = 1
OR phone LIKE :phone
AND :phone_provided = 1
A następnie powiąż :phone_provided
na 1, jeśli $this->phone
jest zdefiniowany, 0 inaczej. Podobnie z :name_provided
.