Le problème est probablement que $this->phone
est vide lorsque vous exécutez la requête.
Dans ce cas, la requête sera SELECT * FROM [...] OR WHERE phone LIKE '%%'
qui renverra toujours tout.
Solution :omettez les critères de téléphone s'ils ne sont pas fournis ou (alerte de piratage ! ) utilisez une valeur qui n'apparaîtra jamais dans cette colonne.
Une autre façon de faire est de changer la requête en quelque chose comme
SELECT *
FROM directory
WHERE name LIKE :name
AND :name_provided = 1
OR phone LIKE :phone
AND :phone_provided = 1
Et puis liez :phone_provided
à 1 si $this->phone
est défini, 0 sinon. De même avec :name_provided
.