![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 24.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Jestem poczatkujacy w php5. NIe rozumie paru rzeczy odnosnie PDO. Przykladowy skrypt (specjalnie z bledem)
tabela w MySQL qyglada nastepujaco (typ tabeli: InnoDB)
Pytania: 1.dlaczego $stmt->bindValue(':id',$id,PDO::PARAM_INT); nie odrzuca wartosci string? przeciez po to sie dodaje ten parametr (PDO::PARAM_INT) 2. Dlaczego MySQL nie odrzuca stringa dla pola id? uzywam php 5.1.6, baza MySQL 5.0.22 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 176 Pomógł: 0 Dołączył: 30.11.2004 Ostrzeżenie: (0%) ![]() ![]() |
id jest auto_increment więc możesz bindować co chcesz i tak nic to nie da
![]() PARAM_INT itp. jest to info dla zapytania jaki typ jest bindowany (podejrzewam, że chodzi tu o użycie cudzysłowa, czego wymaga zapytanie przy dodawaniu stringa) -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 24.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
wklejam podobny przyklad:
mysql:
wykonalem powyzszy kod i dla $nr='cos' $cos='cos' oraz dla $nr=7; $cos=7; w zadnym przypadku php nie zglosil bledy/wyjatku. MySQL zachowal sie tak ze gdy podawalem dla $nr string wpisywal w rekord 0; a gdy do $cos podawalem liczbe do bazy wpisal liczbe w takim razie jaki jest sens podawania parametrów PDO::PARAM_INT lub PDO::PARAM_STR ? Chyba za nie jest to jeszcze do konca gotowe, czytalem ze PDO jest w fazie rozwoju... |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 176 Pomógł: 0 Dołączył: 30.11.2004 Ostrzeżenie: (0%) ![]() ![]() |
no jednak się niezgodze, ze jest to do niczego zwłaszcza, gdy w php nie ma jako takiego przypisywania do zmiennej danego typu, możliwe jest rzutowanie, ale to nie jest to co naprzykład w C, tu głównie chodzi o to, aby dany typ przy wykonywaniu zapytania do bazy był prawidłowo rozpoznawany przez baze, a to , że zamiast stringu z flagą PARAM_INT zapisuje do bazy 0 świadczy tylko o tym, że to działa
![]() ![]() -------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 24.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
po prostu myslalem ze jak juz jest taka metoda (bindValue) w ktorej sie podaje jakiego typu ma byc parametr przekazany do bazy to ta klasa wyzuci wyjatek przy wstawienia takiej danej do bazy... No coz jeszce wiele sie musze nauczyc
![]() Cytat a to , że zamiast stringu z flagą PARAM_INT zapisuje do bazy 0 świadczy tylko o tym, że to działa ale na odwrot to juz tak nie dziala... wstawiajac liczbe tam gdzie okresli sie ze to ma byc PARAM_STR, PDO wstawia do bazy wlasnie ta liczbe. Moim zdaniem PDO w tkim przypadku powinno odrzucac takie zapytania albo ewentualnie wstawiac do bazy 0, ale to jest tylko moje zdanie poczatkujacego phpowca:) |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 602 Pomógł: 30 Dołączył: 1.08.2007 Skąd: Nowy Sącz Ostrzeżenie: (0%) ![]() ![]() |
zacytuje wikibooks
Cytat Podpinanie jest odporne na ataki SQL Injection. MySQL ma jasno określone, co jest danymi, a co zapytaniem i ściśle się tego trzyma. Ponadto jest także wydajniejsze, niż samodzielne spinanie wszystkiego po stronie PHP.
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%) ![]() ![]() |
Podpinanie parametrów jest realizowane przez PDO wtedy i tylko wtedy, jeśli nie obsługuje tego baza. W każdym innym wypadku pretensje, dlaczego to działa tak, a nie inaczej, należy kierować do autorów konkretnego SZBD. Ręczne określanie typu nie jest MySQL-owi do niczego potrzebne. Możliwe są wywołania odpowiednich metod bez określenia typu danych. Zresztą, gdyby się ściśle tego trzymać, nie dałoby się korzystać z większości typów, jakie oferuje konkretna baza danych, jako że w PDO stałych typowych mamy dokładnie sześć i brakuje np. typu zmiennoprzecinkowego.
Niemniej jeśli chodzi o SQL Injection, jest to prawda. Jeśli dane ładujemy poprzez podpinanie, nie musimy się w ogóle o to martwić, tak samo możemy spokojnie wyłączyć magic quotes - dane są niezależne od zapytania i jedynie błąd samej bazy danych może to zmienić. Jeśli jednak oprócz podpinania część samego zapytania sklejamy ręcznie po stronie skryptu na podst. danych z zewnątrz, wtedy tam oczywiście musimy korzystać z odpowiednich zabezpieczeń. -------------------- Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 11:35 |