Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]klasa do obsługi mysql
Forum PHP.pl > Forum > PHP
Mlodycompany
Witam. Zacząłem pisać sobie klasę do obsługi mysql'a i napotkałem problem logiczny.
  1. #$table = string, $cols = null / array('name_cols'), $where = null / array('name_cols' => 'value'), $order = null / array('name_cols', 'mode'), $limit = null / array(integer, integer)
  2. public function select($table, $cols = array(), $where = array(), $order = array(), $limit = array()){
  3. if(count($cols) == 0){
  4. $cols = '*';
  5. }
  6. else{
  7. $cols = implode(', ', $cols);
  8. $cols = '`'.$cols.'`';
  9. }
  10. $sql = "SELECT ".$cols." FROM `".$table."`";
  11. if(count($where) != 0){
  12. $sql .= ' WHERE ';
  13. $c = 0;
  14. foreach($where as $name_cols => $value){
  15. $c++;
  16. $sql .= '`'.$name_cols.'` = \''.$value.'\'';
  17. if($c < count($where)){
  18. $sql .= ' AND ';
  19. }
  20. }
  21. }
  22. if(count($order) != 0){
  23. $sql .= ' ORDER BY `'.$order[0].'` '.$order[1].'';
  24. }
  25. if(count($limit) != 0){
  26. $sql .= ' LIMIT '.$limit[0].', '.$limit[1].'';
  27. }
  28. echo $sql;
  29. }

Takto działa fajnie, nie mam zastrzeżeń, ale nie pomyślałem że przy filtrowaniu(?, chodzi o WHERE) wyników zamiast AND może być też OR. Kompletnie nie mam pomysłu jak zrobić wybór tego aby definiować czy ma być AND czy OR. Jeszcze jest zagadka bo cała ta formułka może wyglądać następująco
Kod
...WHERE (`kol1` = '1' OR `kol1` = '2') AND `kol2` = 'abc'

Proszę o jakieś naprowadzenie na rozwiązanie owego problemu. Z góry dzięĸi.
Mephistofeles
Niepotrzebnie wynajdujesz koło od nowa.
Jest wiele takich generatorów SQLa, jak choćby DQL z Doctrine.
Poza tym używaj zapytań podpinanych (PDO, bind).
Mlodycompany
Ale jedna koło kołu nie równe. Nie lubie korzystać ze skryptów, których autorem nie jest moja osoba smile.gif
Spawnm
Skoro jest to klasa to rozbij na mniejsze metody aby było select()->where('id', $id, 'OR')->order('id desc')->limit($offset, $limit)->fetchAll();
Mlodycompany
No dobra. Przemyśle jak to ostatecznie rozwiązać i podziele się efektem mojego rozwiązania
Crozin
Cytat
Nie lubie korzystać ze skryptów, których autorem nie jest moja osoba
To teraz zobaczmy jak bardzo nie lubisz korzystać z cudzej pracy:
1. Standardowy zestaw funkcji i klas w PHP nie jest Twojego autorstwa. Wypadałoby przepisać te wszystkie strlen(), PDO, fopen() - swoją drogą: zrobiłbyś duży użytek dla społ. prog. PHP.
2. Lubisz pisać w jakimś śmieciowym języku napisanym byle jak, działającym byle jak? Olej PHP - napisz swój własny język na potrzeby stron www.
3. Serwer HTTP. Apache (czy jakiś inny) to w końcu nie Twoja robota. W sumie to język który stworzysz w pkt. 1-szym może posłużyć do napisania samego serwera.
4. Hmmm... ale ten język do napisania narzędzi z pkt 1 i 2 też trzeba stworzyć. Stwórz swój własny kompilator (do kodu maszynowego).
5. Czekaj, czekaj... ale ten kod maszynowy też będzie przecież wykonywany przez jakiś procesor, którego autorem nie jesteś - Intel, AMD do lamusa!
6. I ma to działać na prąd elektryczny nie Twojego autorstwa, o co to nie.
....
423423423. Stwórz swój własny wszechświat!

W skrócie: naucz wykorzystywać się istniejące rozwiązania, a swoje twórz dopiero w momencie gdy na istniejące Cię nie stać bądź nie spełniają Twoich wymagań.
Mlodycompany
źle mnie zrozumiałeś kolego. Chodzi mi o to, że jak ja coś zrobię czyli w tym przypadku napisze klase do obsługi mysql i będę chciał w niej coś zmienić, ulepszyć to będzie mi łatwiej niż w cudzych "wypocinach". Skoro Ty lubisz nie swoje skrypty to po co w ogóle wziąłeś się za nauke php? Chciałeś mieć stronę? Trzeba było sobie ściągnąć/kupić jakiegoś CMSa i z niego korzystać. Ale nie! Wolałeś zrobić samemu.
Crozin
Cytat
Chodzi mi o to, że jak ja coś zrobię czyli w tym przypadku napisze klase do obsługi mysql i będę chciał w niej coś zmienić, ulepszyć to będzie mi łatwiej niż w cudzych "wypocinach".
Bzdura.
1. Zaoszczędzony czas możesz przeznaczyć na przestudiowanie kodu i wyjście z kolegami na piwo.
2. Masz beznadziejny styl pisania, w dodatku (chociaż ciężko określić to po takim skrawku kodu) piszesz "niby obiektowo", co jest chyba najgorszym z możliwych przypadków (no może takie "niby aspektowe" byłoby gorsze)
Cytat
Skoro Ty lubisz nie swoje skrypty to po co w ogóle wziąłeś się za nauke php?
PHP to tylko i wyłącznie jedno z wielu narzędzi do rozwiązywania problemów.
Cytat
Trzeba było sobie ściągnąć/kupić jakiegoś CMSa i z niego korzystać. Ale nie! Wolałeś zrobić samemu.
Cytat
(...) a swoje twórz dopiero w momencie gdy na istniejące Cię nie stać bądź nie spełniają Twoich wymagań.
Mlodycompany
Dobra, nie zamierzam się z kolegą kłócić. Powiedziałbym coś jeszcze ale sobie daruje...
Mephistofeles
Źródła takiego Doctrine czy innych gotowców są starannie sprawdzane przez wielu ludzi, i masz 100% pewność (porównując do twojego kodu), że będą bezpieczniejsze, szybsze (bo przemyślane) i do tego łatwiejsze w modyfikacji.
Nauczysz się korzystać z gotowych rozwiązań gdy zrozumiesz jak cenny jest stracony na wymyślanie własnych czas.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.