Instalowanie sterownika PDO na serwerze MySQL Linux


102

Niedawno zaproponowano mi zmianę kodu na PDO w celu sparametryzowania zapytań i bezpiecznego zapisywania HTML w bazie danych.

Cóż, oto główne problemy:

  1. 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-mysqlciąg ...

  2. 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.

Odpowiedzi:


183

W Ubuntu powinieneś być w stanie zainstalować niezbędne części PDO z apt using sudo apt-get install php5-mysql

Nie ma ograniczeń pomiędzy jednoczesnym używaniem PDO i mysql_. Będziesz jednak musiał utworzyć dwa połączenia z bazą danych, jedno z mysql_, a drugie z PDO.


1
okej, wyszukałem w moim pliku php.ini i wygląda na to, że domyślnie włączone jest pdo, nadal muszę wiedzieć, czy mogę używać zarówno modułów obsługi pdo, jak i mysql_ * ...
Yuri Scarbaci

1
@ YuriCollector'sEditionRossi Zaktualizowano odpowiedź na to pytanie.
Jani Hartikainen

1
Warto wspomnieć, że musisz później ponownie uruchomić Apache, aby zmiany zostały zastosowane.
Adam F

1
@jonaspas Jeśli korzystasz z systemu Ubuntu, spróbuj zaktualizować za pomocą, sudo apt-get updatea następnie uruchom oryginalną instalację z odpowiedzi.
ryAn_Hdot

14
Dzięki ryAn_Hdot! Ale to też mi się nie udało. Moje rozwiązanie teraz: korzystałem z php7 i musiałem to zrobićsudo apt-get install php-mysql
johnnydoe82

25

To dobre pytanie, ale myślę, że po prostu źle zrozumiałeś, co czytasz.

Zainstaluj PDO

Jest ./config --with-pdo-mysqlto 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-mysqla 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.


więc jeśli chcę używać obu w tym samym czasie, będę musiał użyć obu metod połączenia? mam na myśli to, że mam już uruchomionych około 50 stron, z dużą ilością kodu, programowanie zajęło mi rok i nie mogę wrócić tylko na 1 stronę, i tak nie teraz ... muszę zrobić czy te 50 stron działa tak, jak jest, a ta strona, którą teraz piszę za pomocą pdo, czy to w ogóle możliwe? dzięki za
poświęcony

refaktoryzacja może się przydać, jeśli musisz zmienić dużo kodu. Ale tak, jeśli chcesz używać obu, musisz ustanowić dwa połączenia.
artragis

czy jest łatwy sposób na zreformowanie mojego kodu? obecnie pracuję nad pracą, której nie zacząłem samodzielnie, zostało to zrobione przez innego programistę, który to przerwał, a teraz muszę dostosować się do jego kodu ... to trochę trudne, ponieważ każdy ma swój własny styl, więc wolałbym zostawić to tak, jak jest na razie, ponieważ to oprogramowanie było używane do tej pory bez żadnego problemu ... thx btw ^^, czy muszę zamknąć połączenie mysql przed otwarciem pdo, czy mogę mieć oba otwarte w o tym samym czasie? ^^
Yuri Scarbaci

1
być może możesz użyć IDE, takiego jak netbeans lub eclipse
artragis

1
Znalazłem skrypt, który pozwala na migrację do mysqli, a być może do PDO
artragis

17

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

extension=pdo.so
extension=pdo_mysql.so

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/


Pracował dla mnie. Dzięki. +1
Marcel

1
Nie miałem tych linii w moim pliku php.ini. Tylko mam extension=pdo_mysql.dll, więc odkomentowałem to i ponownie uruchomiłem apache i zadziałało.
user3494047

@ user3494047 Myślę, że używasz systemu Windows. Wziąłem przykład konfiguracji z systemu Linux. Ale świetnie, że podzieliłeś się swoim doświadczeniem!
Tobias Gaertner

Właściwie to ubuntu 14.04
user3494047

Dzięki! Musiałem uruchomić kilkanaście 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)
Nikhil VJ,

11

Najpierw zainstaluj niezbędne części PDO, uruchamiając polecenie, sudo apt-get install php*-mysqlgdzie * 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 instrukcje

extension=pdo.so
extension=pdo_mysql.so

w pliku .ini i zrestartuj serwer poleceniem

sudo service apache2 restart

Ta odpowiedź nie dodaje żadnych nowych informacji - więc jej imo nie jest pomocne.
Tobias Gaertner,

1
Ta odpowiedź była niezwykle pomocna, ponieważ wskazała, że ​​potrzebujesz numeru wersji PHP w php*-mysql. Próbowałem php-mysqli php7-mysqlbezskutecznie, a ta odpowiedź przypieczętowała umowę! Dzięki!
jedmao

Pracował dla mnie. Dzięki.
Mahir Altınkaya,

@ MahirAltınkaya Gald, pomogło.
Avnish alok

9
  1. PDO oznacza PHP Data Object.
  2. PDO_MYSQL to sterownik, który zaimplementuje interfejs między obiektem danych (bazą danych) a danymi wejściowymi użytkownika (warstwa w interfejsie użytkownika zwana „kodem”), uzyskując dostęp do obiektu danych, bazy danych MySQL.

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ć.

>


0

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

RUN docker-php-ext-install mysql mysqli pdo pdo_mysql

Tworzenie i uruchamianie aplikacji to tylko proces 2-etapowy (biorąc pod uwagę, że znajdujesz się w bieżącym katalogu aplikacji):

$ docker build -t myCakePhpApp .
$ docker run -ti myCakePhpApp

W przypadku, gdy ktoś spróbuje to zrobić z już uruchomionym kontenerem sudo /etc/init.d/apache2 restart
docker
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.