Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pytanie o PDO
Mayka
post 2.12.2012, 11:12:59
Post #1





Grupa: Zarejestrowani
Postów: 304
Pomógł: 1
Dołączył: 12.01.2009
Skąd: Kanapa

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


Dorwałem jakąś ksiązke heliona o programowaniu i zainteresowała mnie biiblioteka PDO tylko mam problem bo niewiem dlaczego takie coś nie zwraca całej tabeli asocjacyjnej tylko jeden jej wpis ? chodzi tu kkonkretnie o funkcje dbRow ale wysyłam nawszelki wypadek całość połączenia.

  1. function dbInit(){
  2. if(isset($GLOBALS['db']))return $GLOBALS['db'];
  3. global $DBVARS;
  4. $db=new PDO('mysql:host='.$DBVARS['hostname'].';dbname='.$DBVARS['db_name'],$DBVARS['username'],$DBVARS['password']);
  5. $db->query('SET NAMES utf8');
  6. $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  7. $db->num_queries=0;
  8. $GLOBALS['db']=$db;
  9. return $db;
  10. }
  11. function dbQuery($query){
  12. $db=dbInit();
  13. $q=$db->query($query);
  14. $db->num_queries++;
  15. return $q;
  16. }
  17. function dbRow($query) {
  18. $q = dbQuery($query);
  19. return $q->fetch(PDO::FETCH_ASSOC);
  20. }
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
d3ut3r
post 2.12.2012, 11:41:04
Post #2





Grupa: Zarejestrowani
Postów: 709
Pomógł: 176
Dołączył: 24.10.2010

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


pomijając zasadność tego kodu, to fetch zwraca wiersz a fetchAll zwraca wszystkie wyniki.


--------------------
http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
Go to the top of the page
+Quote Post
Mayka
post 3.12.2012, 08:27:30
Post #3





Grupa: Zarejestrowani
Postów: 304
Pomógł: 1
Dołączył: 12.01.2009
Skąd: Kanapa

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


Co masz na myśli jeśli chodzi o "zasadność" ?
Go to the top of the page
+Quote Post
d3ut3r
post 3.12.2012, 09:32:06
Post #4





Grupa: Zarejestrowani
Postów: 709
Pomógł: 176
Dołączył: 24.10.2010

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


Najważniejsza wada moim zdaniem to tak naprawdę odcinasz się zupełnie od PDO, wykorzystując twój kod nie masz na przykład możliwości skorzystania z prepared statements do tego twój kod jest podatny na sql injection więc w zasadzie nie zyskujesz nic czego byś nie miał używając mysql_*

Cały "Pikuś" polega na tym żeby operować na obiekcie PDO wówczas możesz wykorzystać wszystkie jego właściwości w sposób odpowiedni z czasem wejdzie Ci to w nawyk i pisanie:

  1.  
  2. $stmt=$db->prepare('SELECT * FROM articlesWHERE id=:id');
  3. $stmt->bindValue(':id',$_GET['id'],PDO::PARAM_INT);
  4. // itd....
  5.  


nie będzie sprawiało problemów.




--------------------
http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
Go to the top of the page
+Quote Post
wookieb
post 3.12.2012, 09:46:19
Post #5





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Prepared statements to funkcjonalność baz danych a nie PDO.
PDO jedynie udostępnia api do łatwego ich używania.

Prepared statements to nie jedyna zabezpieczenie przed SQL injection i wcale nie musi nim być.
Jeżeli programista umie budować zapytania bez prepared statements to jeszcze lepiej dla niego.


--------------------
Go to the top of the page
+Quote Post
d3ut3r
post 3.12.2012, 10:08:22
Post #6





Grupa: Zarejestrowani
Postów: 709
Pomógł: 176
Dołączył: 24.10.2010

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


Z dokumentacji:

Cytat
PDO will emulate prepared statements/bound parameters for drivers that do not natively support them, and can also rewrite named or question mark style parameter markers to something more appropriate, if the driver supports one style but not the other.


Więc nie jest to zwykłe API to także możliwość symulowania tej funkcjonalności w bazach bez jej obsługi. Oczywiście że to nie jedyne zabezpieczenie ale nie rozumiem w czym używanie tego miałoby być gorsze ?. Jeżeli już używamy PDO to łatwiej moim zdaniem skorzystać z bindowania parametrów.

PDO nie jest lekarstwem na całe zło i jak udowodniono nawet w postach na forum, można z niego korzystać a i tak mieć podatny na ataki system, można też z niego nie korzystać i mieć system bezpieczny. Jednak moim zdaniem nie ma sensu wracać do funkcji typu mysql_query();


--------------------
http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
Go to the top of the page
+Quote Post
wookieb
post 3.12.2012, 10:18:12
Post #7





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Nie mówię o powrocie do mysql_query, lecz moim zdaniem używanie PS do wszystkich zapytań jest znacznym nadużyciem. Wykorzystanie zwykłych query builderów rozwiązuje całą gamę problemów związanych z SQL injection.


--------------------
Go to the top of the page
+Quote Post
Mayka
post 4.12.2012, 14:08:10
Post #8





Grupa: Zarejestrowani
Postów: 304
Pomógł: 1
Dołączył: 12.01.2009
Skąd: Kanapa

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


Cytat(wookieb @ 3.12.2012, 10:18:12 ) *
Nie mówię o powrocie do mysql_query, lecz moim zdaniem używanie PS do wszystkich zapytań jest znacznym nadużyciem.


Ale dlaczego ? Czy pdo tak strasznie obciąża serwer czy jak ? Bo nie rozumiem ?
Go to the top of the page
+Quote Post
nospor
post 4.12.2012, 14:10:13
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Tu się chłopaki nie sprzeczają o PDO a o bindowanie zmiennych. Oboje są zgodni, że PDO należy używać, ale różnią się w kwestii bidnowania zmiennych. Czytamy ze zrozumieniem wink.gif


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

"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
Mayka
post 4.12.2012, 15:28:47
Post #10





Grupa: Zarejestrowani
Postów: 304
Pomógł: 1
Dołączył: 12.01.2009
Skąd: Kanapa

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


Cytat(nospor @ 4.12.2012, 14:10:13 ) *
Tu się chłopaki nie sprzeczają o PDO a o bindowanie zmiennych. Oboje są zgodni, że PDO należy używać, ale różnią się w kwestii bidnowania zmiennych. Czytamy ze zrozumieniem wink.gif


No to korzystać z tego w takiej postaci czy nie ? Bo ja już nic z tego nie rozumiem...
Go to the top of the page
+Quote Post
nospor
post 4.12.2012, 15:30:09
Post #11





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Wszystko zależy jak zbudowałeś zapytanie. W tym kodzie nie widać.


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

"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

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.07.2025 - 21:21