Niedawno zaproponowano mi zmianę kodu na PDO w celu sparametryzowania zapytań i bezpiecznego zapisywania HTML w bazie danych.
Cóż, oto główne problemy:
Spojrzałem na http://php.net/manual/en/ref.pdo-mysql.php i tak naprawdę nie rozumiem, gdzie powinienem umieścić ten
$ ./configure --with-pdo-mysql
ciąg ...Witryna, którą buduję, w rzeczywistości wymaga tylko PDO dla jednej strony. Chociaż mogę rozważyć ponowne napisanie tego, zajmie to trochę czasu i chcę, aby strony wkrótce zaczęły działać, więc nie mogę całkowicie wyłączyć MySQL. Jeśli zainstaluję PDO, czy nadal będę mógł używać
mysql_*
programów obsługi?
Na serwerze, o którym mowa, działa PHP w wersji 5.4.6-1ubuntu1 i Apache / 2.2.22 (Ubuntu). Prowadzę też bazę danych phpMyAdmin, jeśli ma to znaczenie.
sudo apt-get update
a następnie uruchom oryginalną instalację z odpowiedzi.sudo apt-get install php-mysql
To dobre pytanie, ale myślę, że po prostu źle zrozumiałeś, co czytasz.
Zainstaluj PDO
Jest
./config --with-pdo-mysql
to coś, co musisz założyć tylko wtedy, gdy kompilujesz własny kod PHP. Jeśli instalujesz go za pomocą menedżerów pakietów, wystarczy użyć wiersza poleceń podanego przez Jany'ego Hartikainena:sudo apt-get install php5-mysql
a takżesudo apt-get install pdo-mysql
Zgodność z mysql_
Pomijając fakt, że mysql_ jest naprawdę odradzane, oba są niezależne. Jeśli używasz PDO, mysql_ nie jest implikowane, a jeśli używasz mysql_, PDO nie jest wymagane.
Jeśli wyłączysz PDO bez zmiany żadnej linii w kodzie, nie będziesz miał problemu. Ale odkąd zacząłeś łączyć się i pisać zapytania z PDO, musisz go zachować i zrezygnować z mysql_.
Kilka lat temu zespół MySQL opublikował skrypt migracji do MySQLi . Nie wiem, czy można to dostosować, ale to oficjalne.
źródło
Zasadniczo odpowiedź od Jani Hartikainena jest prawidłowa! Głosowałem za jego odpowiedzią. To, czego brakowało w moim systemie (opartym na Ubuntu 15.04), to włączenie rozszerzenia PDO w moim php.ini
zrestartuj serwer WWW (np. za pomocą "sudo service apache2 restart") -> co dobrze :-)
Aby dowiedzieć się, gdzie znajduje się twój aktualny aktywny plik php.ini, możesz użyć phpinfo () lub innych wskazówek stąd: https://www.ostraining.com/blog/coding/phpini-file/
źródło
extension=pdo_mysql.dll
, więc odkomentowałem to i ponownie uruchomiłem apache i zadziałało.sudo apt-get install...
poleceń i nic nie działało, w końcu dodanie tych dwóch wierszy do pliku php.ini dało efekt. Wystarczy wspomnieć komendę restartu serwera Apache, które uruchamiane po zapisaniu:sudo service apache2 restart
. A moja ścieżka do pliku php.ini to/etc/php/7.0/apache2/php.ini
(system operacyjny: Lubuntu 16.04, analogicznie do Ubuntu w tych celach). Uruchom,sudo gedit <fullpath>
aby go edytować. (gedit lub geany lub dowolny edytor tekstu w twoim systemie)Najpierw zainstaluj niezbędne części PDO, uruchamiając polecenie,
sudo apt-get install php*-mysql
gdzie * jest nazwą wersji php, na przykład 5.6, 7.0, 7.1, 7.2 Po instalacji należy wspomnieć (odkomentować, jeśli już tam jest) te dwie instrukcjew pliku .ini i zrestartuj serwer poleceniem
źródło
php*-mysql
. Próbowałemphp-mysql
iphp7-mysql
bezskutecznie, a ta odpowiedź przypieczętowała umowę! Dzięki!Celem tego jest zaimplementowanie dodatkowej warstwy bezpieczeństwa między interfejsem użytkownika a bazą danych. Korzystając z tej warstwy, dane można znormalizować przed wstawieniem do struktury danych. (Wielkie litery są dużymi literami, bez spacji początkowych ani końcowych, wszystkie daty mają prawidłowe sformułowanie).
Ale jest w tym kilka niuansów, których możesz nie być świadomy.
Po pierwsze, do tej pory prawdopodobnie zapisywałeś wszystkie swoje zapytania w czymś podobnym do adresu URL, a parametry przekazujesz za pomocą samego adresu URL. Korzystając z PDO, wszystko to odbywa się na poziomie interfejsu użytkownika. Interfejs użytkownika przekazuje piłkę do PDO, który przenosi ją w dół pola i umieszcza w bazie danych w celu uzyskania 7-punktowego TOUCHDOWN ... dostaje siedem punktów, ponieważ dostał ją tam i zrobił o wiele bezpieczniej niż przekazywanie informacji przez adres URL .
Możesz także zabezpieczyć swoją witrynę pod kątem wstrzykiwania SQL za pomocą warstwy danych. Korzystając z tej warstwy pośredniej, która jest JEDYNYM „graczem”, który rozmawia z samą bazą danych, jestem pewien, że możesz zobaczyć, jak mogłoby to być znacznie bezpieczniejsze. Interfejs do warstwy danych do bazy danych, warstwy danych do bazy danych do warstwy danych do interfejsu.
I:
Wdrażając najlepsze praktyki podczas pisania kodu, będziesz znacznie bardziej zadowolony z wyniku.
Dodatkowe źródła:
Re: Funkcje MySQL w url php dot net / manual / en / ref dot pdo-mysql dot php
Re: architektura trójwarstwowa - dodawanie zabezpieczeń do aplikacji https://blog.42.nl/articles/introducing-a-security-layer-in-your-application-architecture/
Re: Object Oriented Design przy użyciu UML Jeśli naprawdę chcesz dowiedzieć się więcej na ten temat, to najlepsza książka na rynku, Grady Booch był ojcem UML http://dl.acm.org/citation.cfm?id=291167&CFID = 241218549 i CFTOKEN = 82813028
Lub sprawdź w Bitmonkey. Jest tam grupa, z którą na pewno możesz się wiele nauczyć.
>
Gdybyśmy wiedzieli, co naprawdę oznacza terminologia, nie musielibyśmy się niczego uczyć.
>
źródło
Jeśli potrzebujesz kontenera Docker CakePHP z MySQL, stworzyłem obraz Dockera do tego celu! Nie musisz się martwić o konfigurację. Po prostu działa!
Oto jak zainstalowałem w obrazie opartym na Ubuntu:
https://github.com/marcellodesales/php-apache-mysql-4-cakephp-docker/blob/master/Dockerfile#L8
Tworzenie i uruchamianie aplikacji to tylko proces 2-etapowy (biorąc pod uwagę, że znajdujesz się w bieżącym katalogu aplikacji):
źródło
sudo /etc/init.d/apache2 restart