आप "नॉट न्यूल" को बाइंड नहीं कर सकते। आप केवल मानों को बाइंड कर सकते हैं . "IS NOT NULL" एक मान नहीं है, यह पूरी तरह से अलग क्वेरी सिंटैक्स है। आपको बस अपनी क्वेरी को गतिशील रूप से बनाना होगा, वैल्यू बाइंडिंग इसमें आपकी मदद नहीं कर सकती है:
$query = 'SELECT ... WHERE ';
if (/* condition is NOT NULL */) {
$query .= 'foo IS NOT NULL';
$stmt = $db->prepare($query);
} else {
$query .= 'foo = :foo';
$stmt = $db->prepare($query);
$stmt->bindValue('foo', $foo);
}
$stmt->execute();