![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Staram się napisać mały CMS korzystając z dobrodziejstw PHP5, działając na WebServ. Poniżej przedstawię kilka kwestii, które chciałbym pokrótce omówić, 1. postanowiłem skorzystać z funkcji mysqli - tu były pierwsze schody, bo musiałem uruchomić specjalną bibliotekę na WebServ - czy to częsty problem na serwerach, że nie obsługują mysqli? czy są konkretne przesłanki, aby korzystać z tej funkcji, czy raczej nic to nie daje? 2. mam plik db.php, on includuje się do pliku systemowego, a w nim mam coś takiego:
a) czy takie połączenie za pomocą mysqli jest poprawne? B) $db->query('SET NAMES \'utf8\''); // na WebServie jest problem z tabelami MySQL, które mają kodowanie utf8_unicode_ci i tylko za pomocą takiej komendy działa wszystko poprawnie 3. w niektórych momentach w systemie są formularze, które będą uzupełniane przez internautów, zatem napisałem taką małą funkcję:
// czy ona wystarczy, aby zabezpieczyć się przed SQL INJECTION? po prostu każda zmianna, która wejdzie do zapytania SQL, będzie musiała ją przejść 4. mam plik info.php, który ukazuje zwyczajne podstrony, includuje on plik systemowy, w nim jest klasa, a następnie operacja, w której następuje pobranie danych (nie będę przedstawiać całego kodu, bo nikomu nie chciałoby się analizować)
a) czy taki kod jest poprawny "$this->data->num_rows"? pamiętam, że przy starych funkcjach każdy odradzał używania funkcji mysql_num_rows do liczenia ilości rekordów, gdyż wraz z liczbą rekordów, skrypt pobierał wszystkie pola, co obciążało serwer i sugerowano używania funkcji mysql_result, np.
B) czy konieczne jest użycie takiego kodu: "$this->data = $this->data->fetch_assoc();" w tym stare funkcje bardziej mi się podobały, bo wystarczył taki kod, aby od razu mieć wszystkie dane w tablicy:
c) czy w tym kodzie powinienem oprócz tego przeprowadzić jakąś zmianę? Ten post edytował marcinek37 28.08.2012, 09:28:02 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Przerzuć się na uniwersalne PDO. Masz w dokumentacji przykłady jak obsłużyć wyjątki. 3. prepared statements. Kolejne to też następstwo przestawienia się na PDO.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 2 958 Pomógł: 574 Dołączył: 23.09.2008 Skąd: wiesz, że tu jestem? Ostrzeżenie: (0%) ![]() ![]() |
W twoim kodzie nie widzę ani kropli z tego co daje PHP5 - zaczynając od obiektów kończąc na wyjątkach, po drodze zahaczając o wspomniane PDO. Przerzuć się na WampServer 2.2 (webserv od dłuższego czasu nie był uaktualniany) a w nim masz PHP 5.4.3 oraz MySQL 5.5.24
ps. zobacz jak piszą takie rzeczy ludzie z wieloletnim doświadczeniem i wtedy zacznij tworzyć coś swojego Ten post edytował CuteOne 28.08.2012, 10:06:49 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
czy możecie podać linki do dobrze skonstruowanych kodów, wyciągających i obsługujących dane z MySQL?
sugerujecie, że mysqli to przeżytek, więc chętnie zobaczyłbym, co jest na "topie" kiedyś pisałem na forum pytanie, na co zwrócić uwagę przy pisaniu CMSa, aby był jak najbardziej zgodny ze standardami PHP5, jednak nie otrzymałem odpowiedzi |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 592 Pomógł: 62 Dołączył: 3.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
mysqli nie jest żadnym przeżytkiem i obsługuje model obiektowy, prepared statements i wszystko co ma PDO, a na dodatek jest szybsze od PDO,
poza tym PDO i MySQLi korzystają z tego samego sterownika mysqlnd. Pozostaje kwestia, żeby to poprawnie napisać. Manual, manual i jeszcze raz manual (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
możesz dać przykład, gdzie kod został źle napisany?
zajmie Ci to minutkę, a przynajmniej będę wiedzieć, o co chodzi piszę ten kod wraz z książką, którą kiedyś polecaliście na forum |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Jest tyle kursów: http://wwwgo.pl/article/10/php_data_object...luge_baz_danych
Ostatnio pisałem jak postawić cały serwer: http://wwwgo.pl/article/13/konfiguracja_sr...%3A_serwer_http W skrócie chodzi o to że całość która napisałeś miesza mocno stare podejście czyli zwykłe funkcje mysqli_ z obiektowością. Czyli dla przykładu rozszerzenie mysqli http://www.php.net/manual/en/mysqli.quicks...-statements.php. Przyda ci się też http://us.php.net/manual/en/language.exceptions.php |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
z tego PDO nie skorzystam, skoro mysqli jest szybsze
w moim poście dałem tylko 4 kody, może mi ktoś tylko naświetlić, co dokładnie jest nie tak? no i przy okazji odpowiedzieć na konkretne pytania, bo nadal nie mam odpowiedzi |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 592 Pomógł: 62 Dołączył: 3.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Jeśli do tej pory nie zauwazyłeś co jest nie tak w Twoim kodzie, to lepiej skorzystaj PDO, gdzie obiektowość jest wymuszona (nie masz innego api (IMG:style_emoticons/default/smile.gif) ),
poza tym do PDO jest więcej tutoriali, a szybkością nie masz co się przejmować, bo chyba nie tworzysz serwisu dla miliona użytkowników (IMG:style_emoticons/default/tongue.gif) przede wszystkim zacznij od nauki OOP, bo PDO czy MySQLi to po prostu obiektowe API do sterownika bazy danych, nie rózni się niczym od użycia innych obiektowych bibliotek. |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Pierwsze z brzegu porównania szybkości : http://jnrbsn.com/2010/06/mysqli-vs-pdo-benchmarks
NIe zauważysz różnicy. Szybciej zapomnisz indeksu jakiegoś który spowoduje 10x więcej strat. Natomiast kiedy już nauczysz się korzystać z PDO będzie łatwiej przestawić się np na Doctrine. Zauważ że wszystkie projekty ORMów korzystają z PDO a nie rozszerzeń mysql i mysqli. Poza tym co jeśli stwierdzisz w jakimś momencie że badziewie MySQL to już za mało? |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 592 Pomógł: 62 Dołączył: 3.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
@up takie porównania nie są miarodajne,
oba api korzystają z tego samego sterownika, wiec trzeba by zobaczyć na poziomie opcodów co się dzieje po drodze do sterownika i tylko w tym imo może być róznica wydajności na korzyść mysqli, pytanie czy inaczej jest zorganizowana komunikacja ze sterownikiem, tego nie wiem, ale różnice w wydajności w każdym razie są niezauważalne dla standardowych aplikacji, a dla tych wymagających samo użycie PHP jest już powodem złej wydajności ;-) |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 239 Pomógł: 0 Dołączył: 2.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
czyli sugerujecie, że PDO jest lepszym rozwiązaniem?
a odpowiecie na moje powyższe pytania mimo wszystko? zajmie Wam to minutkę, a dzięki temu wszystko sobie w głowie poukładam |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 2 958 Pomógł: 574 Dołączył: 23.09.2008 Skąd: wiesz, że tu jestem? Ostrzeżenie: (0%) ![]() ![]() |
1. Jeżeli już postanowiłeś skorzystać z PDO to na serwerze stwórz sobie plik phpinfo.php a w nim
Dzięki niemu będziesz wiedział co serwer oferuje 2. Poczytaj o łączeniu się przez PDO a) poprawne, może i tak ale czy dobre.. kwestia gustu :) B) podczas połączenia z PDO, możesz ustalić z jakiego kodowania będziesz korzystał 3. Poczytaj o bindowaniu zmiennych w PDO 4. a) goły PDO (czyli tak jak teraz Twój kod pod mysql) jest niewiele wart. Dopiero z dodatkowymi warstwami modelu, które "zaopiekują" się danymi zobaczysz, że pytania "czy używać mysql_num_rows" nie będą miał sensu (wszystkie dane będą obiektami na których operujesz a nie "tablicą z danymi"). Zobacz sobie do frameworków jak ta zorganizowano modele B) pytanie bez sensu jak i argumentacja c) co znaczy "przeprowadzić zmienna" Ten post edytował CuteOne 1.09.2012, 14:23:25 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 19:39 |