Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Sterownik]Sterownik do Mysql
marcio
post
Post #1





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


WItam pisze sobie sterownik do bazy Mysql dla zapotrzebowan mojego cms'a i mysle tak sobie czy takie rozwiazane jest godne uzycia np:
  1. <?php
  2. function DbSqlSelect($columns = array('*'), $table = '', $wh = array(''), $other = '') {
  3.  
  4. if(count($columns) == 1) $column = $columns[0];
  5. else if(count($columns) > 1) $column = implode(',', $columns);
  6. else $column = '*';
  7.  
  8. if(count($wh) == 1) {
  9.  
  10. $key_tab = array_keys($wh);
  11. $where = $key_tab[0];
  12.  
  13.  foreach($wh as $argv => $args)
  14.  
  15.  $countArgs = count($args);
  16.  
  17.   for($i = 0; $i < $countArgs; $i++) {
  18.  
  19.    if(is_int($args[$i])) $where .= "(int)$args[$i]";
  20.    else if(is_string($args[$i-1])) $where .= "mysql_real_escape_string('$args[$i]')";
  21.    else $where .= $args[$i];
  22.  
  23.   }
  24. }
  25.  
  26. else if(count($wh) > 1) {
  27.  
  28. $where = '';
  29.  
  30.  foreach($wh as $key => $value) {
  31.  
  32.  $where .= $key;
  33.  $countValue = count($value);
  34.  
  35.   for($i = 0; $i < $countValue; $i++) {
  36.  
  37.   if(is_int($value[$i])) $where .= "(int)$value[$i]";
  38.   else if(is_string($value[$i-1])) $where .= "mysql_real_escape_string('$value[$i]')";
  39.   else $where .= $value[$i];
  40.  
  41.     }
  42.   }
  43. }
  44. else $where = '';
  45.  
  46. if(count($wh) != 0 && !empty($other)) $SqlSelect = 'select '.$column.' from '.$table.' where '.$where.' '.$other.'';
  47.  
  48.  else if(count($wh) != 0 && empty($other)) $SqlSelect = 'select '.$column.' from '.$table.' where '.$where;
  49.  
  50.   else if(count($wh) == 0 && !empty($other)) $SqlSelect = 'select '.$column.' from '.$table.' '.$other;
  51.  
  52.    else $SqlSelect = 'select '.$column.' from '.$table;
  53.  
  54. return $sql = mysql_query($SqlSelect);
  55.  
  56. }
  57. ?>

A tak np wywoluje zapytania:
  1. <?php
  2. /*Wiecej warunkow where*/
  3.  
  4. //Wynik: select * from m_users where id=(int)1 and login=mysql_real_escape_string('marcio')
  5. $zawartosc .= DbSqlSelect(array('*'), 'm_users', array('id' => array('=', 1, ' and '), 'login' => array('=','marcio')));
  6.  
  7. /*Dla jednego warunku where*/
  8.  
  9. //Wynik: select * from m_users where login=mysql_real_escape_string('marcio')
  10. $zawartosc .= DbSqlSelect(array('*'), 'm_users', array('login' => array('=', 'marcio')));
  11.  
  12. /*Przyklad dla Sys. news'ow*/
  13.  
  14. $ris = DbSqlSelect(array('*'), 'news', array(), "order by id desc limit ".$strona*$liczba.",".$liczba."");
  15. $dane = DbSqlRecordsAssoc($ris);
  16. $count_dane = count($dane);
  17. for($i = 0; $i < $count_dane; $i++) {
  18.  
  19.  $wynik2 = DbSqlSelect(array('id'), 'komentarze', array('id_news' => array('=', $dane[$i]['id']))); //SPosob z uzyciem funk. DbSqlSelect
  20.  $wynik2 = DbSqlQuery('select * from komentarze where id_news = '.(int)$dane[$i]['id'].''); //Zwykly select
  21.  $ile_comm = DbSqlNumRows($wynik2);
  22.  $ile_comm = DbSqlCountRows('select count(id) from komentarze where id_news = '.$dane[$i]['id'].'');
  23. }
  24. ?>

Ilosc komentarzy mozna utrzymac w 2 sposoby albo za pomoca DbSqlQuery() ktory pobiera resource zapytania lub za pomoca DbSqlCountRows() ktore liczy normalnie.

Nie musze filtrowac zmiennych ani nic wydaje mi sie tez to bardziej czytelne i w ogole.

Na podstawie funckji DbSqlSelect() chcialbym zrobic tez wlasna skladnie dla zapytan Update,Insert i Delete, oczywiscie DbSqlSelect() nie oferuje wszyskich przypadkow zapytan ale dla podstawowych wystarcza.

P.S pojawil sie problem mam funkcje:
  1. <?php
  2. function DbSqlNumRows($Sql) {
  3.  
  4. return $sql = mysql_num_rows($Sql);
  5. }
  6. ?>

Gdy jej wynik przypisze jakiejs zmiennej to Mysql zwraca mi blad ze jest zly identyfikator polaczenia a jesli dam odrazu do echo DbSqlNumRows($id_zapytania) to jest good dlaczego tak sie dzieje, po modyfikacji funkcji DbSqlSelect() nastapil taki problem a przeciez jest return w funkcji (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) moze juz jest pozno i nie kontaktuje.

P.S2 oczywiscie nie chce oceny co do kodu bo wiem ze ameryki nie odkrylem jednak nie bylem pewny gdzie umiescic temat jako ze jest troche dwuznaczny.

Ten post edytował marcio 6.03.2009, 00:07:25
Go to the top of the page
+Quote Post
.radex
post
Post #2





Grupa: Zarejestrowani
Postów: 1 657
Pomógł: 125
Dołączył: 29.04.2006

Ostrzeżenie: (0%)
-----


Cytat
mysle tak sobie czy takie rozwiazane jest godne uzycia np:


moim zdaniem te wszystkie funkcje nie mają sensu, jeśli używasz tylko MySQL, bo ani trochę nie ułatwiają pracy

  1. <?php
  2. $wynik2 = DbSqlSelect(array('id'), 'komentarze', array('id_news' => array('=', $dane[$i]['id'])));
  3. $id = intval($dane[$i]['id']);
  4. $wynik2 = CośDoQuery("SELECT `id` FROM `komentarze` WHERE `id_news` = '$id'");
  5. ?>


Jak widać, czyste rozwiązanie nie jest wiele dłuższe, a o wiele bardziej czytelne. A można zrobić jeszcze coś w tym stylu:

  1. <?php
  2. $wynik2 = CośDoQuery("SELECT `id` FROM `komentarze` WHERE `id_news` = '%1'", intval($dane[$i]['id']));
  3. //albo
  4. $wynik2 = CośDoQuery("SELECT `id` FROM `komentarze` WHERE `id_news` = '%i'", $dane[$i]['id']);
  5. ?>
Go to the top of the page
+Quote Post
skowron-line
post
Post #3





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


No takie srednie te twoje funkcje. Może zamiast takie rzeczy pisać zainteresuj się PDO
http://www.php.net/pdo
http://pl.wikibooks.org/wiki/PHP/Biblioteka_PDO

Nie będziesz wymyślał koła na nowo.
Go to the top of the page
+Quote Post
phpion
post
Post #4





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Moim zdaniem pisanie takich "sterowników" mija się z celem. Dużo bardziej przydatnym narzędziem byłoby coś na wzór Kohanowego Query Buildera. Dzięki niemu można w bardzo prosty sposób dynamicznie budować zapytania (szczególnie przydatne przy SELECTach).
Go to the top of the page
+Quote Post
ucho
post
Post #5





Grupa: Zarejestrowani
Postów: 300
Pomógł: 32
Dołączył: 31.07.2006

Ostrzeżenie: (0%)
-----


Phpion ma rację, też używam takiego bardzo prymitywnego "sklejacza" - kiedy używa się wielu podobnych zapytań. np. we wszelkiego rodzaju raportach, wydzielenie części wspólnej bardzo pomaga w utrzymaniu. Lepsze to, niż, z czym się spotkałem, dodawanie warunków do zapytania za pomocą preg_replace (IMG:http://forum.php.pl/style_emoticons/default/haha.gif)

Ten post edytował ucho 6.03.2009, 13:39:57
Go to the top of the page
+Quote Post
marcio
post
Post #6





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Cytat
No takie srednie te twoje funkcje

Czyli nie jest tez takie zle (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) ??

Cytat
Może zamiast takie rzeczy pisać zainteresuj się PDO

Nie pisze w OOP wiec nie chce mieszac kodu to raz a dwa nie chce mi sie czytac jakiejs dokumentacji wystarczy mi ta z php i sql (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Cytat
jeśli używasz tylko MySQL, bo ani trochę nie ułatwiają pracy

W sumie tu daje ci 70% racji ale kto wie moze projekt sie rozwinie i bede musial zrobic sterownik tez dla postgresql etc... wiec wtedy mozna edytowac ta funkcje i dodac np jako argument jakiej bazy sie uzywa i jest to porzyteczne, a dwa nie musze sie martwic co do filtrowania zmiennych ktore trafiaja do zapytania jak juz mi sie stalo w starym cms'ie ze zapomnialem rzytowac na int i byl Sql.Inj (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Nie wiem jak dla mnie takie cos wydaje sie czytelniejsze niz pisanie za kazdym razem calego zapytania i bawienie sie w ' i " jak juz sie ktos przyzyczai to czemu nie (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
skowron-line
post
Post #7





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


Cytat(marcio @ 6.03.2009, 14:48:59 ) *
Czyli nie jest tez takie zle (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) ??
Nie pisze w OOP wiec nie chce mieszac kodu to raz a dwa nie chce mi sie czytac jakiejs dokumentacji wystarczy mi ta z php i sql (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
W sumie tu daje ci 70% racji ale kto wie moze projekt sie rozwinie i bede musial zrobic sterownik tez dla postgresql etc... wiec wtedy mozna edytowac ta funkcje i dodac np jako argument jakiej bazy sie uzywa i jest to porzyteczne, a dwa nie musze sie martwic co do filtrowania zmiennych ktore trafiaja do zapytania jak juz mi sie stalo w starym cms'ie ze zapomnialem rzytowac na int i byl Sql.Inj (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)


No ale PDO też ma sterownik dla innych baz danych, a to że nie piszesz w OOP to o niczym nie swiadczy w kodzie strukturalnym też można odwoływać się do klas. Jak będziesz chcial wygenerować sobie PDF to tez napiszesz sobie funkcje skoro masz gotowe klasy (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

( jakas mało składna ta wypowiedz )
Go to the top of the page
+Quote Post
marcio
post
Post #8





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


No ale albo jest struktularny kod albo OOP.

Nie wiem wole pisac wlasne klasy nie lubie frameworkow ani gotowych klas dopoki dobrze php nie poznam wole uzywac wlasne skrypty

Cytat
( jakas mało składna ta wypowiedz )

O co chodzi?
Go to the top of the page
+Quote Post
.radex
post
Post #9





Grupa: Zarejestrowani
Postów: 1 657
Pomógł: 125
Dołączył: 29.04.2006

Ostrzeżenie: (0%)
-----


Cytat(marcio @ 6.03.2009, 15:15:05 ) *
Nie wiem wole pisac wlasne klasy nie lubie frameworkow ani gotowych klas dopoki dobrze php nie poznam wole uzywac wlasne skrypty


To może zamiast marnować czas na pisanie skryptów naucz się dobrze php?
Go to the top of the page
+Quote Post
marcio
post
Post #10





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Cytat(.radex @ 6.03.2009, 15:43:22 ) *
To może zamiast marnować czas na pisanie skryptów naucz się dobrze php?


To jak mam sie go uczyc jak nie piszac wlasne kody i analizowac kody innych czytac ksiazki ehh juz sie na takiej nauce przejechalem i wiem ze moja metoda ktora teraz uzywam jest super (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
Crozin
post
Post #11





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Chcesz umieć jakikolwiek język dobrze? Naucz się korzystać z tego co już ktoś wymyślił, szczególnie gdy jest to lepsze, wygodniejsze i istneije spore prawdopodobieństwo, że inni prog. też będą to znać.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 13:16