Bạn không thể ràng buộc "NOT NULL". Bạn chỉ có thể ràng buộc giá trị . "IS NOT NULL" không phải là một giá trị, nó hoàn toàn khác với cú pháp truy vấn. Bạn chỉ cần tự động tạo truy vấn của mình, ràng buộc giá trị không thể giúp bạn làm điều đó:
$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();