2011-01-18 15 views
6

Kiedyś czytałem na blogu, że lepiej jest używać funkcji daty PHP do ustawiania dat w zapytaniu MySQL zamiast używać funkcji daty mysql takich jak curdate(), ponieważ mysql może następnie buforować zapytanie lub wynik lub coś podobnego. Czy ktokolwiek ma wgląd w to? Czy zawiera jakąkolwiek wodę, czy jest bezpodstawny?Funkcje pamięci podręcznej i daty MySQL

przykład:

$query = 'SELECT id FROM table WHERE publish_date = \''.date('Y-m-d').'\''; 

vs

$query = 'SELECT id FROM table WHERE publish_date = CURDATE()'; 

Odpowiedz

7

Każda funkcja zawierający CURDATE() nie być buforowane. Source

Na twardym dysku data powinna być nadal przechowywana w pamięci podręcznej, o ile wiem. Chociaż warto rozważyć użycie funkcji prepare zamiast łączenia łańcuchów w zapytanie (w celu zachowania zdrowia i bezpieczeństwa).

+0

dokładnie to, czego szukałem. dzięki! – dqhendricks

0

Osobiście preffer pierwszy sposób, bo to daje jasną głowę o czasu serwera (strefa czasowa), mój serwer się stało mysql bycia 10h wcześniej, kiedy Obiecali :)

localtime w skrypcie PHP będzie miał zastosowanie w SQL

+0

, podczas gdy nie jest odpowiedzią na to pytanie, nadal jest dobra uwaga. – dqhendricks

2

To całkiem proste. Serwer MySQL nie widzi kodu PHP więc ona otrzymać jedną z nich:

SELECT id FROM table WHERE publish_date = '2010-01-18'; 
SELECT id FROM table WHERE publish_date = CURDATE(); 

Nie będzie czytać swoje intencje albo. Dla MySQL, '2010-01-18' jest ciągiem znaków i jest deterministyczny: jego wartością jest zawsze "2010-01-18". Jednak CURDATE() nie jest deterministyczny: jego wartość zmienia się w zależności od daty uruchomienia. Tak więc pierwszy jest buforowany, a drugi nie.

+0

tak, wiem, że mysql nie widzi mojego php i otrzymuje ciąg znaków. Wiem, że może z pewnością buforować to zapytanie. nie byłem pewien, czy mysql może buforować zapytanie z curdate do końca dnia lub coś podobnego. – dqhendricks

+0

@dqhendricks Cóż, MySQL określa ważność wyniku z pamięci podręcznej w datach modyfikacji tabel podstawowych. To nie jest bardziej skomplikowane. –