Het probleem is waarschijnlijk dat $this->phone
is leeg wanneer u de query uitvoert.
In dat geval is de zoekopdracht SELECT * FROM [...] OR WHERE phone LIKE '%%'
die altijd alles zal teruggeven.
Oplossing:laat de telefooncriteria weg als deze niet zijn opgegeven of (hack alert! ) gebruik een waarde die nooit in die kolom zal voorkomen.
Een andere manier om dit te doen, is door de zoekopdracht te wijzigen in iets als
SELECT *
FROM directory
WHERE name LIKE :name
AND :name_provided = 1
OR phone LIKE :phone
AND :phone_provided = 1
En bind dan :phone_provided
naar 1 als $this->phone
is gedefinieerd, anders 0. Hetzelfde geldt voor :name_provided
.