Vấn đề có lẽ là $this->phone
trống khi bạn chạy truy vấn.
Trong trường hợp đó, truy vấn sẽ là SELECT * FROM [...] OR WHERE phone LIKE '%%'
điều này sẽ luôn trả lại mọi thứ.
Giải pháp:bỏ qua tiêu chí điện thoại nếu không được cung cấp hoặc ( cảnh báo hack! ) sử dụng một giá trị sẽ không bao giờ xuất hiện trong cột đó.
Một cách khác để làm điều này là thay đổi truy vấn thành một cái gì đó như
SELECT *
FROM directory
WHERE name LIKE :name
AND :name_provided = 1
OR phone LIKE :phone
AND :phone_provided = 1
Và sau đó ràng buộc :phone_provided
thành 1 if $this->phone
được xác định, 0 nếu không. Tương tự như vậy với :name_provided
.