2013-05-26 14 views
5

Mam to pytanie, aby wyjaśnić. Czytałem trochę dokumentacji i komentarzy, ale wciąż coś jest po prostu mało jasne.CHNP vs MYSQLI, Przygotowane parametry i parametry wiązania

  • Rozumiem, że PDO oferuje więcej sterowników, co z pewnością jest plusem, jeśli kiedykolwiek zmieniłbyś swój typ bazy danych.
  • Jak powiedział na innym stanowisku, PDO robi oferują prawdziwe przygotowanych sprawozdań, ale mysqli ma więc byłoby bezpieczniejsze w użyciu mysqli
  • Benchmarki wygląda podobnie (nie testowałem go samodzielnie, ale sprawdził się po internecie przez kilka benchmarków)
  • Orientacja obiektowa nie stanowi dla mnie problemu, ponieważ program mysqli nadrabia zaległości. Ale byłoby miło porównać procedurę mysqli z ChNP, ponieważ procedura powinna być nieco szybsza.

Ale oto moje pytanie, z przygotowanym oświadczeniem, czy musimy używać wiązania parametrów z danymi, których używamy w naszym oświadczeniu? dobra praktyka czy trzeba? Rozumiem, że przygotowane instrukcje są dobre pod względem perfermancji, jeśli wielokrotnie uruchamiasz to samo zapytanie, ale czy wystarczy samo zabezpieczenie kwerendy? lub wiążące parametry to konieczność? Czym dokładnie są parametry wiązania i jak to działa, aby chronić dane przed iniekcją sql? Byłoby to również docenione, jeśli wskażesz jakiekolwiek nieporozumienie dotyczące stwierdzeń, które przedstawiłem powyżej.

dzięki

+0

[Czy należy używać przygotowanych wyciągów tylko dla ich uniknięcia?] (Http://stackoverflow.com/a/16365669/285587) –

+0

Co to jest stanowisko stwierdzające, że ChNP nie obsługuje natywnych przygotowanych wyciągów? Musi zostać usunięty lub co najmniej cofnięty –

+0

http://stackoverflow.com/questions/134099/are-pdo-prepared-statements-sufficient-to-prevent-sql-injection, Quote => "Ważna rzecz do zrealizowania tutaj jest to, że PDO domyślnie NIE wykonuje prawdziwych przygotowanych instrukcji, emuluje je (dla MySQL). ", Może być źle zrozumiany ... – Leon

Odpowiedz

4

W skrócie,

  • Oprawa jest koniecznością, będąc podstawą ochrony, niezależnie od tego czy jest ona obsługiwana przez native kierowcy lub nie. Ważna jest idea substytucji.
  • Różnica jest znikoma zarówno pod względem bezpieczeństwa, jak i wydajności, z wyjątkiem przypadków kilku krawędzi.
  • Wydajność to ostatnia rzecz do rozważenia. Nie ma NO API, który jest znacznie wolniejszy niż inne. Nie jest to klasa lub funkcja, która może powodować jakiekolwiek problemy z wydajnością, ale manipulację danymi lub zły algorytm. Zoptymalizuj swoje zapytania - istnieje DROGA do przejścia - nie zwykłe funkcje do ich wywoływania.
  • Jeśli zamierzasz używać surowego API, to PDO jest jedynym wyborem. Będąc opakowanym w wyższą klasę, mysqli wydaje się bardziej odpowiedni dla mysql.
  • Zarówno mysqli, jak i PDO nie mają powiązania z ważnymi literałami, które programista musi napisać, patrz na przykład: safeMysql.
+0

Jeśli właściwie używamy przygotowanych instrukcji i wiążemy parametry zgodnie z oczekiwaniami, to nadal rozważamy użycie tego safeMysql lub stworzyć własną klasę? Rozumiem, że jest to dobre dla "wygodnego, ponieważ sprawia, że ​​kod aplikacji jest krótki i znaczący, bez niepotrzebnych powtórzeń, czyniąc go Extra DRY", jak wspomniano na ich stronie internetowej. – Leon

+0

Ponieważ "Zarówno mysqli, jak i PDO nie są wiążące dla ważnych literałów" - na przykład identyfikatory.Spróbuj powiązać nazwę pola w mysqli lub PDO i zobacz. Instrukcja IN może również stać się problemem. Ideą klasy safeMysql jest nadanie symbolu * wszystkiego *, który może zostać dodany do zapytania, a nie tylko 1 lub 2 typy danych, jakie robi mysqli. –