2012-09-20 12 views
6

Próbuję uzyskać PDO do pracy z MySQL "między". Poniżej znajduje się mój kod:PDO i MySQL "między"

$DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); 

$start_date = date('Y-m-d H:i:s', mktime(0, 0, 0, 11, 1, 2009)); 
$end_date = date('Y-m-d H:i:s', mktime(23, 59, 59, 11, 30, 2009)); 

$STH = $DBH->prepare("SELECT * FROM `table` WHERE `start_date` BETWEEN ':start_date' AND ':end_date'"); 
$STH->bindParam(':start_date', $start_date, PDO::PARAM_STR); 
$STH->bindParam(':end_date', $end_date, PDO::PARAM_STR); 
$STH->execute(); 
var_dump($row); 

To, co zostanie zwrócone, to tablica z wartościami "0" lub "NULL". Kiedy ciężko zakoduję datę końcową, działa tak, jakby start_date ustawiono na -1, ponownie ustawiając wszystkie wiersze przed end_date. Co ja tu robię źle?

Odpowiedz

11

Nie owijaj wartości pojedynczymi cytatami.

$STH = $DBH->prepare("SELECT * FROM `table` WHERE `start_date` BETWEEN :start_date AND :end_date"); 
+0

1 sekundę szybciej :))) –

+0

hehe tylko zauważyłem :) –

+0

Obie były poprawne, ale będę oznaczyć ten jeden jako odpowiedź na twoja prędkość, haha. Dzięki! – Samsquanch

5

Nie należy umieszczać w cudzysłowie params:

$STH = $DBH->prepare("SELECT * FROM `table` WHERE `start_date` BETWEEN :start_date AND :end_date");