Typ zmiennej zwracanej przez mysql_query()

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ć ;].


Komentarze do notki “Typ zmiennej zwracanej przez mysql_query()”

  1. Michał Górny 

    IMO korzystanie z mysql_blabla jest 'deprecated', aktualnie zalecane jest stosowanie ujednoliconego PDO.

  2. Speedy 

    Miałem podobny problem... rozwiązanie? mysql_query() dla nieudanego zapytania zwraca FALSE. Teraz wystarczy odpowiednio uformować instrukcje warunkowe.

  3. g. 

    jak ja uwielbiam jak Ty takie mÄ

  4. Reinmar 

    @Peres: Nie na każdym serwerze dostaniesz PDO. Ja akurat buduje interfejs obsługi tylko MySQLa. Z innych baz raczej korzystać póki co nie będę.
    Ewentualnie jeśli by mi się coś takiego przytrafiło, to mogę bardzo szybko przejść na AdoDB, bo ta biblioteka, którą teraz piszę jest bardzo zbliżona do AdoDB.

  5. Johnny 

    Ale PDO jest wygodne... ;-)

  6. Reinmar 

    Jak PDO będzie na protazym, to się nim zainteresuje :P

Zostaw odpowiedź