Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Przejście z mysqli na PDO
Marci88
post 6.06.2019, 15:54:57
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 6.06.2019

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


Dzień dobry.
Aby się rozwijać postanowiłem nauczyć się i przejść na PDO. Jednak tu trochę inaczej sprawa wygląda przez bindowanie chociażby. Będę wdzięczny, jeśli ktoś pomoże łatwo ten temat ogarnąć. Otóż wypadało by mieć bazę w klasie, więc odpada załączanie pliku z z PDO i takie korzystanie, prawda?

Do tej pory, korzystając z MySQL, zrobiłem sobie coś w tym stylu:

  1. <?PHP
  2. class database{
  3. private $db;
  4.  
  5. public function __construct($config){
  6. $this->config = $config;
  7.  
  8. if($this->config['db_active'] == false){
  9. die("Database is not activated");
  10. }
  11.  
  12. $this->db = new mysqli($this->config['db_host'], $this->config['db_user'], $this->config['db_password'], $this->config['db_database']);
  13.  
  14. if($this->db->connect_error){
  15. die("Connection failed: " . $this->db->connect_error);
  16. }
  17. }
  18. public function queryFetch($query){
  19. $result = mysqli_fetch_array(mysqli_query($this->db, $query));
  20.  
  21. if($this->db->error && $this->config['db_debug_mode']){
  22. die("Error description: " . $this->db->error);
  23. }
  24.  
  25. return $result;
  26. }
  27. public function queryNum($query){
  28. $result = mysqli_num_rows(mysqli_query($this->db, $query));
  29.  
  30. if($this->db->error && $this->config['db_debug_mode']){
  31. die("Error description: " . $this->db->error);
  32. }
  33.  
  34. return $result;
  35. }
  36. public function query($query){
  37. $result = mysqli_query($this->db, $query);
  38.  
  39. if($this->db->error && $this->config['db_debug_mode']){
  40. die("Error description: " . $this->db->error);
  41. }
  42.  
  43. return $result;
  44. }
  45. }


A jeśli chodzi o PDO, to jakoś tak miałoby to wyglądać? Czy to jest poprawnie?
  1. class Database
  2. {
  3. public function __construct($config)
  4. {
  5. $this->config = $config;
  6.  
  7. $dsn = "mysql:host={$config['db_host']};dbname={$config['db_database']};charset={$config['db_charset']}";
  8.  
  9. try {
  10. $pdo = new PDO($dsn, $config['db_user'], $config['db_password'], $config['db_options']);
  11. $this->pdo = $pdo;
  12. } catch (\PDOException $e) {
  13. throw new \PDOException($e->getMessage(), (int)$e->getCode());
  14. }
  15. }
  16.  
  17. public function query($query)
  18. {
  19. $stmp = $this->pdo->query($query);
  20. return $stmp;
  21. }
  22.  
  23. public function prepare($query)
  24. {
  25. $stmp = $this->pdo->prepare($query);
  26. $stmp->execute(['id' => 5]);
  27. return $stmp;
  28. }
  29. }
Go to the top of the page
+Quote Post
nospor
post 6.06.2019, 15:58:55
Post #2





Grupa: Moderatorzy
Postów: 34 585
Pomógł: 5734
Dołączył: 27.12.2004




Cytat
wygląda przez bindowanie chociażby.

mysqli tez ma bindowanie ino ze widze nie uzywales

Nazwa metody PREPARE jest bez sensu bo w niej robisz jeszcze execute.
A poza tym jak ci dziala to jest ok. Jak nie dzial to nie jest ok


--------------------

Najlepsze kawałki programistyczne || Dowcipy o informatykach || Forum PHP dla opornych
Klasy: Pager (stronicowanie) | Cache | ShoutBox (Chat) | Widok | Ładne url'e

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Marci88
post 6.06.2019, 16:15:53
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 6.06.2019

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


Dzięki za odpowiedź,
nie wiedziałem, że mysqli też ma bindowanie. Czy to działa tak samo jak w PDO i zapobiega SQL injection?

Co do kodu - działa. Tylko by był użyteczny muszę też przekazywać dane do bindowania, bo teraz na sztywno zrobiłem.
Ogólnie to jest sens przejścia na PDO? Bo szczerze mówiąc korci mnie tylko dlatego, bo:

- myślałem, że mysqli nie ma bindowania (bindowanie jest tylko po to by chroniło przed atakami?)
- no i w mysqli chyba nie zwraca ile rekordów zostało zaktualizowanych/usuniętych, a w PDO wystarczy "->rowCount()"

Ogólnie to też chciałem przejść na PDO, bo jakoś wszyscy na to naciskają i mówią, że lepsze, choć mysqli ponoć szybsze.
A w ogóle to wszystko wzięło się z tego, że zamierzam napisać mini projekt na juniora/stażystę i mieć go na githubie, bo chciałbym zahaczyć o pracę z PHP
Go to the top of the page
+Quote Post
nospor
post 6.06.2019, 16:20:15
Post #4





Grupa: Moderatorzy
Postów: 34 585
Pomógł: 5734
Dołączył: 27.12.2004




https://www.php.net/manual/en/mysqli.prepare.php
Tak, to tez chroni przed sqlinjection

Ja nie wiem jak ty przegladasz tego manuala czy co ty tam przegladasz ale do liczby rekordow to tez masz
https://www.php.net/manual/en/mysqli-stmt.affected-rows.php

Minus mysqli? Jestes udupiony tylko do mysql. W PDO obsluzysz z grubsza kazda baze.


--------------------

Najlepsze kawałki programistyczne || Dowcipy o informatykach || Forum PHP dla opornych
Klasy: Pager (stronicowanie) | Cache | ShoutBox (Chat) | Widok | Ładne url'e

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Marci88
post 6.06.2019, 16:32:30
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 6.06.2019

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


Dzięki, szczerze mówiąc nawet nie obczajałem w dokumentacji funkcji związanych z mysqli. Muszę poćwiczyć angielski :V

Na chwilę obecną i na moje potrzeby, MySQL w zupełności mi wystarcza. O innych bazach nawet nie próbowałem się niczego dowiedzieć, bo nie widziałem takiej potrzeby, ale obczaję z ciekawości.

Jakiś czasem temu, nawet chyba na tym forum, znalazłem coś takiego "niby wymagania na juniora" tongue.gif
Cytat
Proponuję zrobić stronę która będzie zawierała zadania do zrobienia dla Juniorów smile.gif
- Dodawanie zadania + akceptacja po stronie panelu administratora
- Edycja/Usuwanie zadań przez osobę która je dodała
- Poziomy trudności zadań
- Losowanie zadania w zależności od trudności wykonania
- Tagi do każdego zadania proponujące technologie do wykorzystania


Czy myślisz, że jeżeli zrobię taki projekt to będę miał co liczyć na stażyste/juniora w jakiejś firmie?
Przy okazji w tym projekcie skupię się na pokazaniu się z jak najlepszej strony w html, css, jquery no i oczywiście PHP. Wszelkie formularze zamierzam zrobić asynchronicznie, będzie również routing (lecz nie własny) no i przy tworzeniu tego projektu będę korzystał z githuba, więc wszystkie zmiany będą widoczne dla oglądającego (więc pokażę, że w podstawowym stopniu umiem posługiwać się systemem kontroli wersji) oraz wykorzystam composera do wykorzystania jakiejś biblioteki. A no i jeszcze oddzielę logikę od html, jednak to nie będzie pełny wzorzec MVC, bo jeszcze mam z tym problemy, niemniej poszczególne strony będę sobie renderował przez klasę i przekazywał do niej wcześniej przetworzone dane, gotowe do wyświetlenia w postaci zmiennych.

Sorki, że tak zmieniam temat, ale pomyślałem, że przy okazji spytam biggrin.gif
Go to the top of the page
+Quote Post
nospor
post 6.06.2019, 16:40:41
Post #6





Grupa: Moderatorzy
Postów: 34 585
Pomógł: 5734
Dołączył: 27.12.2004




Projekt na github zawsze dobrze miec. Firma jest w stanie szybko spojrzec czy warto cie zapraszac na rozmowe czy nie. Zas sam projekt nie gwarantuje ze ciebie zatrudnia. Zazwyczaj co porzadniejesze firmy odsiewaja kandydatow na rozmowie kwalifikacyjnej podczas ktorej padaja pytania i ewentualnie zadania.

Tak wiec pisz ten projekt, wrzucaj, na pewno sie przyda ale nie gwarantuje ze ktos cie zatrudni.

Cytat
Na chwilę obecną i na moje potrzeby, MySQL w zupełności mi wystarcza. O innych bazach nawet nie próbowałem się niczego dowiedzieć, bo nie widziałem takiej potrzeby, ale obczaję z ciekawości.
To ze akurat mysql ci wystarczy nie znaczy ze nie masz od pracowac na PDO. Jak popracujesz to przynajmniej bedziesz juz to znal a predzej czy pozniej bedziesz tego potrzebowal wiec po co siedziec na mysqli?


--------------------

Najlepsze kawałki programistyczne || Dowcipy o informatykach || Forum PHP dla opornych
Klasy: Pager (stronicowanie) | Cache | ShoutBox (Chat) | Widok | Ładne url'e

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Marci88
post 6.06.2019, 17:10:35
Post #7





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 6.06.2019

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


Ok, dzięki za wszystko.
Mam nadzieję, że jako tako rozmowy nie będę miał, bo wyłożyłbym się totalnie. Chyba chciałbym się bardziej na staż załapać i nauczyć się nowych rzeczy, a przy okazji coś zarobić. Może ktoś pójdzie na taki układ.
Miłego wieczoru smile.gif
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 24.06.2019 - 15:32