समस्या शायद यह है कि $this->phone
जब आप क्वेरी चलाते हैं तो खाली होता है।
उस स्थिति में, क्वेरी होगी SELECT * FROM [...] OR WHERE phone LIKE '%%'
जो हमेशा सब कुछ लौटाएगा।
समाधान:यदि प्रदान नहीं किया गया है तो फ़ोन मानदंड छोड़ दें या (हैक अलर्ट! ) उस मान का उपयोग करें जो उस कॉलम में कभी नहीं होगा।
ऐसा करने का दूसरा तरीका क्वेरी को कुछ इस तरह बदलना है
SELECT *
FROM directory
WHERE name LIKE :name
AND :name_provided = 1
OR phone LIKE :phone
AND :phone_provided = 1
और फिर :phone_provided
. को बाइंड करें से 1 अगर $this->phone
परिभाषित किया गया है, 0 अन्यथा। इसी तरह :name_provided
. के साथ ।