Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL]PDO mysql - exec czy podpinanie?
michat34
post 5.10.2012, 22:04:34
Post #1





Grupa: Zarejestrowani
Postów: 200
Pomógł: 1
Dołączył: 4.08.2012

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


witam tak sie zastanawiam. znam dwa sposoby na wprowadzanie danych do tabeli w PDO.

a) exec
cool.gif podpinanie

exec to kwestia jeden linijki, a przy podpinaniu kod troche sie wydłuza. i stad moje pytanie ktorego lepiej uzywac? podpinanie chyba chorni przed sql incjetion, ale w sumie jak sie dobrze ktos zabezpieczy, filtracja danych itd. to ciezko bedzie cos wstrzyknac do naszej bazy. tak wiec kiedy lepiej uzyc podpiania niz exec (oprocz dodawania kiku pakietow na raz bo to zastosowanie znam)
Go to the top of the page
+Quote Post
memory
post 5.10.2012, 23:05:35
Post #2





Grupa: Zarejestrowani
Postów: 616
Pomógł: 84
Dołączył: 29.11.2006
Skąd: bełchatów

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


exec - sztywne dane
prepare - reszta

w czym problem zrobić sobie funkcje
  1. public function exec2 ($sql, $data = array())
  2. {
  3. $sth = parent::prepare($sql);
  4. $sth->execute($data);
  5. $sth->fetchAll();
  6. }
  7.  
  8. exec2 ('SELECT name, colour, calories FROM fruit WHERE calories < ? AND colour = ?', array(150,red))


Ten post edytował memory 5.10.2012, 23:09:04
Go to the top of the page
+Quote Post
michat34
post 6.10.2012, 09:21:08
Post #3





Grupa: Zarejestrowani
Postów: 200
Pomógł: 1
Dołączył: 4.08.2012

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


dlaczego exec sztywne dane? przeciez zapytanie typu:

$a = 'jeden';
$b = 'dwa';
$stmt=$pdo->exec("INSERT INTO tabela (zmienna1,zmienna2) VALUES ('$a','$b')");

rowniez zadziala

Ten post edytował michat34 6.10.2012, 09:21:27
Go to the top of the page
+Quote Post
jaslanin
post 6.10.2012, 10:55:16
Post #4





Grupa: Zarejestrowani
Postów: 511
Pomógł: 143
Dołączył: 13.03.2010
Skąd: Jasło

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


w Twoim przykładzie z exec, jeżeli te dwie zmienne masz od usera to taki kod jest podatny na SQL INJECTION

prepare - właśnie po to powstało by temu zapobiegać


--------------------
Good luck and happy PHP'ing
Go to the top of the page
+Quote Post
bostaf
post 6.10.2012, 22:55:59
Post #5





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

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


Cytat(michat34 @ 5.10.2012, 23:04:34 ) *
a) exec
b) podpinanie

To którą metodę wybrać, zależy od potrzeby, od odpowiedzi jaką chcemy uzyskać.
Różnice:
  • Funkcja exec, wg manuala, wykonuje zapytanie i zwraca liczbę wierszy. Wg manuala, dane zewnętrzne przekazywane do zapytania w funkcji exec powinny zostać odpowiednio spreparowane ("eskejpowane"). Podobna funkcja PDO - query - też wykonuje zapytanie, którego dane muszą zostać eskejpowane, ale zwraca rezultat jako obiekt PDOStatement.
  • Podpinanie. Czyli prepare i execute. Te funkcje zaprojektowane są z myślą o elastyczności i bezpieczeństwie jednocześnie. Elastyczność, bo jeden raz skonstruowane zapytanie można wywoływać dowolną ilość razy, za każdym razem zmieniając tylko dane wejściowe, be konieczności przepisywania tego samego zapytania. Bezpieczeństwo, bo dają możliwość bindowania danych zewnętrznych do zapytania, czyniąc tym samym zapytanie zupełnie odpornym na SQL Injection.
Czego użyć? Jeśli przekazujesz dane zewnętrzne (czy to z GET czy z POST czy jakiekolwiek inne) to tylko i wyłącznie prepare/execute z bindowaniem (podpinaniem). Jeśli nie przekazujesz danych zewnętrznych, to zależy co chcesz uzyskać: jeśli dane z SELECTa to PDO::query, jeśli inne to PDO::exec.
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: 13.06.2025 - 04:50