Właśnie zainstalowałem Debian Lenny z Apache, MySQL i PHP i otrzymuję wyjątek PDO could not find driver
.
Jest to konkretny wiersz kodu, do którego się odnosi:
$dbh = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASS)
DB_HOST
, DB_NAME
, DB_USER
, I DB_PASS
są stałymi że mam zdefiniowane. Działa dobrze na serwerze produkcyjnym (i na mojej poprzedniej konfiguracji serwera Ubuntu).
Czy to ma coś wspólnego z moją instalacją PHP?
Przeszukiwanie Internetu nie pomogło, wszystko, co otrzymuję, to wymiana ekspertów i przykłady, ale żadnych rozwiązań.
php.ini' file and uncomment
rozszerzenia =. The path to your
plik php_pdo_mysql.dll plik php.ini` można znaleźć, patrząc na swoją phpinfo ().extension=msql.so
i działa!docker exec
wejść do kontenera i uruchomićdocker-php-ext-install pdo pdo_mysql
.Odpowiedzi:
Musisz mieć moduł o nazwie pdo_mysql. Szukam następujących w phpinfo (),
źródło
pdo_mysql
?sudo systemctl restart httpd.service
sudo apt-get install php-mysql
Dsn w twoim kodzie ujawnia, że próbujesz połączyć się ze sterownikiem mysql. Twój komunikat o błędzie wskazuje, że ten sterownik jest niedostępny.
Sprawdź, czy masz zainstalowane rozszerzenie mysql na serwerze.
W Ubuntu / Debian sprawdzasz pakiet za pomocą:
Zainstaluj pakiet php5-mysql, jeśli go nie masz.
W Ubuntu / Debian możesz używać:
sudo apt-get install php5-mysql
sudo apt-get install php7.0-mysql
Wreszcie, aby go uruchomić, musisz ponownie uruchomić serwer WWW:
sudo /etc/init.d/apache2 restart
sudo /etc/init.d/nginx restart
źródło
Aktualizacja : nowsze wersje powinny używać
php-sqlite3
pakietu zamiastphp5-sqlite
. Więc skorzystaj z tego, jeśli używasz najnowszej wersji ubuntu:Oryginalna odpowiedź na pytanie znajduje się tutaj:
Jeśli twoja phpinfo () nie pokazuje linii pdo_sqlite (w moim przypadku na moim Ubuntu Server), wystarczy uruchomić powyższe linie i będziesz gotowy.
źródło
pdo_sqlite
i nie instalowałeśphp5-sqlite
, dostaniesz tylkoPDOException
brak informacji o brakującym sqlite i spróbuj zainstalowaćphp5-mysql
dwa razy.Dla nowszych wersji Ubuntu, które mają PHP 7.0, możesz uzyskać
php-mysql
pakiet:Następnie uruchom ponownie serwer:
źródło
Miałem ten sam problem. Rozwiązanie zależy od systemu operacyjnego. W moim przypadku mam debian, więc aby go rozwiązać:
Zainstaluj php-mysql i php7.0-mysql
Zredagowałem swoją
php.ini
lokalizację na /etc/php/7.0/apache2/php.iniNastępnie uruchom ponownie apache:
To rozwiązuje mój problem
źródło
a2dismod php5
,a2enmod php7.0
, iservice apache2 restart
wreszcie mnie z powrotem i działa.Na moim komputerze z Windows musiałem podać bezwzględną ścieżkę do katalogu rozszerzenia w moim php.ini:
extension_dir = "c:\php5\ext"
źródło
extension_dir = "ext"
, ale nie z tym.Na Ubuntu po prostu uruchom
źródło
sudo apt-get install php5-pgsql
działał dobrze na Ubuntu i php 7
źródło
Sprawdź, czy moduł jest dostępny z
php -m | grep pdo_mysql
.Jeśli nie, dla PHP 7.2 możesz zainstalować odpowiedni pakiet za pomocą
sudo apt install php7.2-mysql
.Użyj podobnej komendy w innych wersjach PHP i menedżerach pakietów.
źródło
Podczas dodawania ich do php.ini upewnij się, że odwołanie php_pdo.dll jest pierwsze przed bibliotekami DLL sterowników db, w przeciwnym razie spowoduje to również ten komunikat o błędzie. Dodaj je w ten sposób:
źródło
php_pdo.dll
moduł nie jest już wymagany (nie istnieje). php.net/manual/en/pdo.installation.php jest prawdopodobnie najlepszą odpowiedzią na to pytanie.Czy sprawdziłeś php.ini (sprawdź poprawność lokalizacji za pomocą phpinfo ()), czy MySQL i sterownik są poprawnie zainstalowane?
źródło
[MySQL]
Na
PHP 5.5
onCentOS
naprawiłem to, instalującphp55-mysqlnd
pakiet.Aby uzyskać pomoc dotyczącą instalacji, napisz komentarz, ponieważ zależy to od sposobu zainstalowania PHP w twoim systemie. Dostępne repo to
webtatic
iremi
.źródło
dla Windows 8.1 / 10 w pliku: \\ php.ini powinieneś odkomentować wiersz "extension = pdo_mysql"
źródło
W moim przypadku mój ciąg DSN był niepoprawny, a konkretnie nie zawierał
mysql://.
, oczekiwałbym innego komunikatu o błędzie, być może coś w rodzaju „Ciąg DSN nie określa sterownika / protokołu”.Dodanie
mysql://
na początku ciągu DSN rozwiązało problem.źródło
Ostatni dzień spędziłem, próbując dowiedzieć się, dlaczego pojawia się następujący błąd. Używam Ubuntu 14.04.
Problem:
Zauważyłem, że moja wersja PHP-CLI używała php7.0, ale php_info () (wersja internetowa) wyświetlała php 5.5.9. Mimo że php_info () powiedział, że pdo jest włączone, użycie wiersza poleceń (CLI) nie rozpoznało polecenia pdo_mysql. Okazuje się, że mysql został włączony dla mojej starej wersji, ale nie dla wersji CLI. Wszystko, co zrobiłem, to zainstalować mysql dla php7.0 i był w stanie działać.
To działało:
Aby sprawdzić wersję:
Aby zainstalować mysql dla php7.0
1) upewnij się, że wersja CLI jest taka sama jak wersja internetowa
2) Jeśli są różne, upewnij się, że wersja CLI ma wtyczkę mysql, ponieważ nie ma jej domyślnie.
źródło
Sprawdź, czy katalog rozszerzenie_pliku w pliku konfiguracyjnym php jest ustawiony poprawnie. Spróbuj skomentować / odkomentować niektóre rozszerzenia i sprawdź, czy ma to odzwierciedlenie w phpinfo (). Jeśli tak się nie stanie, nie można załadować pliku konfiguracyjnego php (zła lokalizacja) katalog_dodatku jest komentowany lub ustawiony w niewłaściwej lokalizacji.
źródło
Problemem jest brak biblioteki php do mysql. W CentOs naprawiłem to, uruchamiając,
# yum install php-mysql
a następnie ponownie uruchamiając apache z# /bin/systemctl restart httpd.service
Uwaga, że nazewnictwo różni się nieco od dystrybucji opartych na debian / ubuntu, php-> php5 i httpd-> apache2.źródło
Miałem ten sam problem podczas uruchamiania testów z oddzielnym plikiem php.ini. Musiałem dodać te linie do własnego pliku php.ini:
Uwaga: Dokładnie w tej kolejności
źródło
Zdecydowanie polecam
mysqllnd
zamiastmysql
ciebie, ponieważ miałbyś wiele problemów, takich jak konwersja liczb i typ bitów ocenia problemmysql
rozszerzeniem.na Ubuntu zainstaluj za
mysqllnd
pomocą następującego polecenia:źródło
Naprawiłem ten problem na moim Debianie 6. Zwykle właśnie zainstalowałem
php5-common
pakiet. Po instalacji musisz zrestartować serwer WWW (apache lub nginx w zależności od tego, który zainstalowałeś). Następnie wykonuję po prostulsof
proces id (lsof -p process_id
) procesu apache w następujący sposób:Jak widać powyżej, moduły są instalowane na ścieżce pliku nieznanej lub prowadzonej przez wspólną ścieżkę biblioteki: /
usr/lib/php5/20090626/
. W przypadku instalacji może być inna, ale tylko ścieżka do pdo_mysql.so, pdo.so, mysqli.so. Oto dlaczego Drupal lub inny silnik php nie mógł znaleźć biblioteki i pokazuje ten błąd:PDOException: could not find driver
Ja po prostu nie wiem, dlaczego jest on zainstalowany na takiej ścieżce dziwne, dla mnie to po prostu błąd w bibliotece skryptu instalacyjnego pakietu w Debianie 6. I rozwiązać problem tworząc symboliczny dla wszystkich plików w
/usr/lib/php5/20090626/
celu/usr/lib/php5/
poleceniem:ln -s /usr/lib/php5/20090626/* /usr/lib/php5/
źródło
To zadziałało dla mnie.
źródło
Ten sam problem napotkałem po usunięciu pakietu php5 (który obejmuje również wszystkie sterowniki) w celu zainstalowania pakietu php7. Właściwie zainstalowałem pakiet php7 bez modułu mysql.
Udało mi się to rozwiązać, wpisując terminal:
1) $ apt-cache search php7, który zawiera listę wszystkich modułów, przeglądając znalezione moduły,
php7.0-mysql - moduł MySQL dla PHP
2) $ sudo apt-get install php7.0-mysql
Otóż to. To działało dla mnie w moim systemie Linux.
(użyj odpowiedniej wersji php, twoją może być php5)
źródło
Jeszcze jedna rzecz do potwierdzenia, ponieważ niektóre osoby kopiują / wklejają przykładowy kod z Internetu, aby rozpocząć. Upewnij się, że wpisałeś MySQL tutaj:
W niektórych przykładach pokazuje to
źródło
W moim przypadku używałem PDO z php-cli i działało dobrze.
Dopiero gdy próbowałem połączyć się z Apache, dostałem problem „brakującego sterownika”, którego nie do końca rozumiałem.
Prosty
apt-get install php-mysql
to rozwiązał. (Ubuntu 16.04 / PHP7. Kredyty przejdź do wybranej odpowiedzi i komentarza Ivana)Mam nadzieję, że to może pomóc.
źródło
Dla tych, którzy używają Symfony2 / 3 i zastanawiają się, dlaczego pojawia się ten błąd. Jeśli używasz „mapping_types”, możesz napotkać ten błąd. Powodem jest to, że „typy mapowania” są umieszczone na niewłaściwym poziomie. Na przykład :
Te „typy mapowania” należy umieścić na tym poziomie:
mam nadzieję, że to pomoże
Znalazłem rozwiązanie tutaj: https://github.com/doctrine/DoctrineBundle/issues/327
źródło
Gdziekolwiek idę, czytam, że ścieżkę
extension_dir
należy zmienić zext
absolutnej. To zadziałało dla mnie. Jednak, gdy próbowałem zbudować serwer na komputerze mojego kolegi, musiałem pozwolić sobie na wartośćext
zamiast stawiać absolutną ścieżkę.Jeśli podałeś ścieżkę bezwzględną, ale rozszerzenie nadal nie zostało znalezione, rozważ próbowanie ścieżki bezwzględnej i
ext
.źródło
Wywoływano niepoprawną instalację PHP
Miałem ten sam problem. Mam nadzieję, że pomogłoby to komuś, kto ma podobny problem jak ja.
Scenariusz
Utworzyłem
phpinfo.php
plik wpublic
folderze i uruchomiłem,phpinfo()
aby wyszukać lokalizację mojegophp.ini
pliku.PHP.ini Lokalizacja =
c:\xampp\php\php.ini
Problem z
połączeniem
c:\xampp\htdocs> php -v
wrócił,PHP 7.2.3
alephpinfo.php
pokazał sięPHP 7.2.2
.Rozwiązanie
Zamiast dzwonić
który dał mi ten błąd, użyłem
i zadziałało.
źródło
Sprawdź poprawną ścieżkę w katalogu katalog_główny w swoim phpinfo ().
źródło
Walczyłem i walczyłem z „apt install php-mysql php7toInfinity i nie zapomnij o sqlite-what-ever's” i po prostu nie mogłem pozbyć się tego komunikatu o błędzie, dopóki nie wróciłem do podstaw i nie zresetowałem uprawnień do plików na stronie internetowej w pytaniu.
Te 3 polecenia resetują uprawnienia do plików i folderów na stronie internetowej i sprawiają, że znów działa.
źródło
Miałem ten sam wyjątek przy próbie użycia
pdo_sqlite
. Problem polegał na tym, że automatycznie utworzone20-pdo_sqlite.ini
i20-sqlite3.ini
dowiązania symboliczne (w/etc/php5/mods-enabled
) zostały zerwane.Usuwanie zepsutych dowiązań symbolicznych i ręczne dodawanie ich za pomocą:
sudo ln -s /etc/php5/mods-avaliable/pdo_sqlite.ini /etc/php5/mods-enabled/20-pdo_sqlite.ini
sudo ln -s /etc/php5/mods-avaliable/sqlite3.ini /etc/php5/mods-enabled/20-sqlite3.ini
naprawiono problem.
źródło