Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> mysql_real_escape_string a PDO
vegeta
post 27.06.2011, 19:13:22
Post #1





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 9.11.2008

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


Witam.
Przerzucam projekt z MySQL na PDO (a później na całkowity OOP).
Czy istnieje funkcja w PDO wykonująca takie samo zadanie jak mysql_real_escape_string od MySQL?
Jeśli nie to czy mogę jej używać z PDO?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
Crozin
post 27.06.2011, 19:16:08
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Masz przecież PDO::quote() - jak byk w manualu wypisane. Tylko po co Ci to, skoro PDO umożliwia korzystanie z Prepared Statements?
Go to the top of the page
+Quote Post
vegeta
post 27.06.2011, 19:34:00
Post #3





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 9.11.2008

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


A da się coś bez apostrofów na początku i końcu? Chcę wyrzucić specjalne znaki z loginu przy rejestracji i logowaniu. Przy logowaniu z quote() komunikat "Niepoprawny login lub hasło."
Go to the top of the page
+Quote Post
erix
post 27.06.2011, 19:51:57
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




No nie, elementarz mamy wyjaśniać? Poczytałeś w ogóle jakieś kursy, dokumentację?

Śmiem twierdzić, że nie.


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
vegeta
post 27.06.2011, 20:06:35
Post #5





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 9.11.2008

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


Tak. Dobra walić to.

1. Czy zwykłe:
  1. $pre = $pdo -> prepare('SELECT id FROM users WHERE login COLLATE utf8_bin = :login and haslo = :pass limit 1')
  2. $pre -> execute(array(':login' => $login, ':pass' => $pass));


Wystarczy? $login to po prostu $_POST['login'];

2. Jaka jest różnica w bezpieczeństwie/szybkości zastosowania znaków zapytania jako parametrów między zastosowaniem nazwanych parametrów (:login)?

3. Jak odnieść się do wyników zapytania w execute? Np. taki rowCount(). Gdy mam jakąś zmienną przed $pre -> execute to mam błąd

Ten post edytował vegeta 27.06.2011, 20:10:24
Go to the top of the page
+Quote Post
erix
post 27.06.2011, 21:31:10
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Wystarczy? $login to po prostu $_POST['login'];

I gitara. wink.gif

Cytat
2. Jaka jest różnica w bezpieczeństwie/szybkości zastosowania znaków zapytania jako parametrów między zastosowaniem nazwanych parametrów (:login)?

Chyba tylko różnica w wygodzie... Mając same znaki zapytania musisz pilnować kolejności, a gdy parametry są nazwane - możesz odwoływać się jak do hashtablicy.

Cytat
3. Jak odnieść się do wyników zapytania w execute? Np. taki rowCount().

A przeglądałeś przykłady z manuala?

Cytat
Gdy mam jakąś zmienną przed $pre -> execute to mam błąd

Błędów może być tysiące.


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
vegeta
post 27.06.2011, 23:37:35
Post #7





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 9.11.2008

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


Jest jakaś funkcja sprawdzająca, czy PDO przy Select zwróciło pusty wynik czy muszę robić zawsze rowCount()? Mam taki kod i if zawsze się sprawdza, więc nie mogę sie zarejestrować.

  1. $login = $_POST['login'];
  2. (...)
  3. $pre1 = $pdo -> prepare('SELECT id FROM users WHERE login = ? COLLATE utf8_bin limit 1');
  4. $pre1 -> execute(array($login));
  5. if($pre1 != ''){ // jeśli login istnieje
  6. echo 'Obywatel o takim loginie już istnieje. <a href="rejestracja.php">Spróbuj ponownie.</a>';
  7. }


Ten post edytował vegeta 27.06.2011, 23:39:37
Go to the top of the page
+Quote Post
thek
post 28.06.2011, 07:16:28
Post #8





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




A Ty chociaż sprawdzileś co po wykonaniu zapytania znajduje się w pre1? :/ Noż podstawy debugu i chwila zerknięcia w manual :/


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
vegeta
post 28.06.2011, 09:35:36
Post #9





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 9.11.2008

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


Pre przy błędzie zwraca mi np.

Kod
Catchable fatal error: Object of class PDOStatement could not be converted to string
.

Jeśli rejestruję się prawidłowo to nic nie wyświetla echo $pre1 $pre2 i 3

Zrobiłem to tak:
  1. $login = $_POST['login'];
  2. (...)
  3. $pre1 = $pdo -> prepare('SELECT id FROM users WHERE login = ? COLLATE utf8_bin limit 1');
  4. $pre1 -> execute(array($login));
  5. $ile1 = $pre1 -> rowCount();
  6. if($ile1 > 0){ // jeśli login istnieje
  7. echo 'Obywatel o takim loginie już istnieje. <a href="rejestracja.php">Spróbuj ponownie.</a>';
  8. }



Cytat
Masz przecież PDO::quote() - jak byk w manualu wypisane. Tylko po co Ci to, skoro PDO umożliwia korzystanie z Prepared Statements?

quote() daje na początku i na końcu ciągu znaków apostrof. Prepare nie (przykład powyżej), ale nie daje również slashów przy apostrofach wpisanych z formularza i w bazie jest identyczny nick. Przykładowo: wpisuję teste'rek - w bazie mam teste'rek. Czy muszę napisać funkcję w preg_match, w której dam wszystkie dozwolone znaki do loginu (A-Z, a-z, 0-9, -, _) a loginy z innymi znakami wywalać i dać stosowny komunikat?
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: 19.07.2025 - 19:38