Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: mysql_real_escape_string a PDO
Forum PHP.pl > Forum > PHP
vegeta
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?
Crozin
Masz przecież PDO::quote() - jak byk w manualu wypisane. Tylko po co Ci to, skoro PDO umożliwia korzystanie z Prepared Statements?
vegeta
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."
erix
No nie, elementarz mamy wyjaśniać? Poczytałeś w ogóle jakieś kursy, dokumentację?

Śmiem twierdzić, że nie.
vegeta
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
erix
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.
vegeta
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. }
thek
A Ty chociaż sprawdzileś co po wykonaniu zapytania znajduje się w pre1? :/ Noż podstawy debugu i chwila zerknięcia w manual :/
vegeta
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?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.