Nie jestem uzależniony! :P

7 komentarzy

Oto On (dla niewtajemniczonych - to woreczek na magnezję, substancję mającą na celu zapobieganie pocenia się rąk podczas wspinaczki): Woreczek na magnezjęWoreczek na magnezję

Prawda, że piękny? :) Jakby się komuś spodobał, to polecam oloiolo'a.

Typ zmiennej zwracanej przez mysql_query()

6 komentarzy

Pisząc dzisiaj klasę, która będzie modelem w nowej wersji mojego frameworka, natrafiłem na problem, z którym jakoś nigdy wcześniej nie miałem doczynienia. Wynika to z tego, że pisząc zwykły proceduralny kod zazwyczaj wiemy jakie zapytanie zostało wykonane i nie mamy problemu, czy na wyniku można wykonać mysql_num_rows(), lub inną funkcję odpowiednią dla zapytań z insert, czy też nie. Kiedy jednak zaczynami pisać kod zorientowany obiektowo nie jest już tak fajnie i trzeba (przynajmniej w moim przypadku) napisać bardziej wyspecjalizowaną klasę zawierającą metody odpowiednie do typu zapytania.

Funkcja mysql_query() zwraca dwa typy. Dla zapytań select, show, describe i explain zwraca zmienną typu resource, a dla innych zapytań zwraca boolean.

Tak więc jedyne co musimy zrobić, to sprawdzić typ zmiennej. Służy do tego funkcja gettype(). Oto prosty kod metody zwracającej bardziej wyspecjalizowaną klasę w zależności od typu zapytania:

(...)
public function getInstance($result)
{
	if (gettype($result) == 'resource')
		return new DBQueryResource($result);
	else
		return new DBQueryBoolean($result);
	//Jak ktoś ma lepszy pomysł na nazwy klas, to niech mów :P.
}

To oczywiście bardzo prosty problem, ale ja musiałem poświęcić kilka minut na zastanowienie się, więc chcę już tego innym zaoszczędzić ;].