PDO bindParam для даты не работает

Я новичок в PDO, я делал функцию php, чтобы возвращать результаты поиска рейсов, это мой код:

$db = DB::getConnection(); $stmt = $db->prepare("SELECT * FROM `flights` WHERE `date` BETWEEN :befDate AND :aftDate AND `from` = :from AND `to` = :to AND `weight` >= :weight"); $stmt->bindParam(':befDate', $befDate, PDO::PARAM_STR); //$befDate = '2016-07-21'; $stmt->bindParam(':aftDate', $aftDate, PDO::PARAM_STR); //$aftDate = '2016-07-28'; $stmt->bindParam(':from', $from, PDO::PARAM_INT); $stmt->bindParam(':to', $to, PDO::PARAM_INT); $stmt->bindParam(':weight', $weight, PDO::PARAM_INT); $ok = $stmt->execute(); if ($ok) { if ($stmt->fetchColumn()>=1) { $result = $stmt->fetchAll(); } else{ $result = 'nope'; } return $result; } else{ return false; } 

Проблема в том, что она всегда возвращает 0 результатов поиска. Я попытался запустить свой SQL, сгенерированный с помощью функции вручную, в phpMyAdmin и обнаружил, что проблема заключается в том, что SQL, сгенерированный PDO:

 "SELECT * FROM `FLIGHTS` WHERE `DATE` BETWEEN 2016-07-17 AND 2016-07-25 AND `FROM` = 1237 AND `TO` = 2380 AND `WEIGHT` >= 4" 

в то время как правильный SQL, из которого я получаю результаты, должен быть:

 "SELECT * FROM `FLIGHTS` WHERE `DATE` BETWEEN '2016-07-17' AND '2016-07-25' AND `FROM` = 1237 AND `TO` = 2380 AND `WEIGHT` >= 4" 

т.е. с значениями даты между одинарными кавычками. Теперь, если я добавляю кавычки к моему SQL в PDO, например:

 $stmt = $db->prepare("SELECT * FROM `flights` WHERE `date` BETWEEN ':befDate' AND ':aftDate' AND `from` = :from AND `to` = :to AND `weight` >= :weight"); 

Я получаю сообщение «Недопустимый номер параметра: число связанных переменных не совпадает с числом токенов». Спасибо за помощь!

ОБНОВИТЬ:

Табличная структура «полетов»:

 CREATE TABLE `flights` ( `fid` int(30) NOT NULL, `user_id` int(30) NOT NULL, `date` date NOT NULL, `from` int(30) NOT NULL, `to` int(30) NOT NULL, `weight` int(30) NOT NULL, `size` varchar(30) NOT NULL, `details` varchar(200) NOT NULL, `price` int(50) NOT NULL, `airline` varchar(100) NOT NULL, `pnr` varchar(100) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

Я попытался удалить все кавычки из запроса и поместить его в одну неразрывную строку:

 $stmt = $db->prepare("SELECT * FROM flights WHERE date BETWEEN :befDate AND :aftDate AND from = :from AND to = :to AND weight >= :weight"); 

но все же он не работает …

ОБНОВЛЕНИЕ 2 Чтобы определить, как выглядел оператор SQL после привязки параметров к PDO (оператор без одинарных кавычек), я сделал переменную сеанса, такую ​​же, как мой SQL, в начале функции и повторил ее для просмотра результата:

 $_SESSION['err'] = "SELECT * FROM flights WHERE date BETWEEN $befDate AND $aftDate AND from = $from AND to = $to AND weight >= $weight"; 

Related of "PDO bindParam для даты не работает"