Saya baru saja menginstal Debian Lenny dengan Apache, MySQL, dan PHP dan saya menerima PDOException could not find driver
.
Ini adalah baris kode spesifik yang dimaksud:
$dbh = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASS)
DB_HOST
, DB_NAME
, DB_USER
, Dan DB_PASS
adalah konstanta yang saya didefinisikan. Ini berfungsi dengan baik pada server produksi (dan pada pengaturan Server Ubuntu saya sebelumnya).
Apakah ini ada hubungannya dengan instalasi PHP saya?
Mencari di internet tidak membantu, yang saya dapatkan hanyalah pertukaran pakar dan contoh, tetapi tidak ada solusi.
php.ini' file and uncomment
ekstensi Anda = php_pdo_mysql.dll. The path to your
dapat ditemukan dengan melihat phpinfo Anda ().extension=msql.so
dan berfungsi!docker exec
masuk ke dalam wadah dan menjalankannyadocker-php-ext-install pdo pdo_mysql
.Jawaban:
Anda perlu memiliki modul bernama pdo_mysql. Mencari mengikuti di phpinfo (),
sumber
pdo_mysql
?sudo systemctl restart httpd.service
sudo apt-get install php-mysql
Dsn dalam kode Anda mengungkapkan Anda mencoba untuk terhubung dengan driver mysql. Pesan kesalahan Anda menunjukkan bahwa driver ini tidak tersedia.
Periksa apakah ekstensi mysql telah diinstal di server Anda.
Di Ubuntu / Debian Anda memeriksa paket dengan:
Instal paket php5-mysql jika Anda tidak memilikinya.
Di Ubuntu / Debian Anda dapat menggunakan:
sudo apt-get install php5-mysql
sudo apt-get install php7.0-mysql
Terakhir, untuk membuatnya berfungsi, Anda harus me-restart server web Anda:
sudo /etc/init.d/apache2 restart
sudo /etc/init.d/nginx restart
sumber
Perbarui : versi yang lebih baru harus menggunakan
php-sqlite3
paket, bukanphp5-sqlite
. Jadi gunakan ini, jika Anda menggunakan versi ubuntu terbaru:Jawaban asli untuk pertanyaan ada di sini:
Jika phpinfo Anda () tidak menampilkan baris pdo_sqlite (dalam kasus saya, di Ubuntu Server saya), Anda hanya perlu menjalankan baris-baris di atas dan kemudian Anda dapat melanjutkan.
sumber
pdo_sqlite
dan tidak menginstalphp5-sqlite
Anda hanya mendapatkanPDOException
tanpa info tentang sqlite yang hilang dan mencoba menginstalphp5-mysql
dua kali.Untuk versi Ubuntu yang lebih baru yang memiliki PHP 7.0 Anda bisa mendapatkan
php-mysql
paket:Kemudian restart server Anda:
sumber
Saya memiliki masalah yang sama. Solusinya tergantung pada OS. Dalam kasus saya, saya punya debian, jadi untuk menyelesaikannya:
Instal php-mysql dan php7.0-mysql
Saya mengedit
php.ini
lokasi saya di /etc/php/7.0/apache2/php.iniKemudian restart apache:
Ini menyelesaikan masalah saya
sumber
a2dismod php5
,a2enmod php7.0
, danservice apache2 restart
akhirnya saya kembali dan berjalan.Di mesin Windows saya, saya harus memberikan jalur absolut ke direktori ekstensi di php.ini saya:
extension_dir = "c:\php5\ext"
sumber
extension_dir = "ext"
, tetapi tidak yang ini.Di Ubuntu jalankan saja
sumber
sudo apt-get install php5-pgsql
bekerja dengan baik di ubuntu dan php 7
sumber
Periksa apakah modul tersedia dengan
php -m | grep pdo_mysql
.Jika tidak, untuk PHP 7.2, Anda dapat menginstal paket yang relevan dengannya
sudo apt install php7.2-mysql
.Gunakan perintah serupa pada versi PHP lain dan manajer paket.
sumber
Ketika menambahkan ini ke php.ini Anda memastikan referensi php_pdo.dll adalah yang pertama sebelum dll driver db jika tidak, ini juga akan menyebabkan pesan kesalahan ini. Tambahkan mereka seperti ini:
sumber
php_pdo.dll
modul tidak diperlukan (tidak ada) lagi. php.net/manual/en/pdo.installation.php mungkin merupakan jawaban akhir untuk pertanyaan ini.Apakah Anda memeriksa php.ini Anda (periksa lokasi yang benar dengan phpinfo ()) jika MySQL dan driver diinstal dengan benar?
sumber
[MySQL]
Karena
PHP 5.5
padaCentOS
saya memperbaikinya dengan menginstalphp55-mysqlnd
paket.Untuk bantuan menginstal, tulis komentar karena tergantung pada cara PHP diinstal pada sistem Anda. Repo yang tersedia adalah
webtatic
danremi
.sumber
untuk Windows 8.1 / 10 di: \\ file php.ini Anda harus batalkan komentar pada baris "extension = pdo_mysql"
sumber
Dalam kasus saya, string DSN saya salah, khususnya tidak berisi
mysql://.
saya akan mengharapkan pesan kesalahan yang berbeda, mungkin sesuatu seperti 'string DSN tidak menentukan driver / protokol.'Menambahkan
mysql://
ke awal string DSN menyelesaikan masalah.sumber
Saya menghabiskan hari terakhir mencoba mencari tahu mengapa saya mendapatkan kesalahan berikut. Saya menjalankan Ubuntu 14.04.
Masalahnya:
Saya perhatikan bahwa versi PHP-CLI saya menjalankan php7.0 tetapi php_info () (versi web) sedang menampilkan php 5.5.9. Meskipun php_info () mengatakan pdo diaktifkan, menggunakan baris perintah (CLI) tidak mengenali perintah pdo_mysql. Ternyata mysql diaktifkan untuk versi lama saya tetapi bukan versi CLI. Yang saya lakukan adalah menginstal mysql untuk php7.0 dan itu bisa berfungsi.
Inilah yang berhasil:
Untuk memeriksa versi:
Untuk menginstal mysql untuk php7.0
1) pastikan versi CLI Anda sama dengan versi web Anda
2) Jika berbeda, pastikan versi CLI Anda memiliki plug-in mysql karena tidak disertakan sebagai default.
sumber
Periksa apakah extension_dir dalam file konfigurasi php diatur dengan benar. Cobalah untuk berkomentar / batalkan komentar pada beberapa ekstensi dan lihat apakah ekstensi tersebut tercermin di phpinfo (). Jika tidak maka file konfigurasi php tidak dapat dimuat (lokasi salah) extension_dir dikomentari atau disetel ke lokasi yang salah.
sumber
Masalahnya adalah php hilang ke perpustakaan mysql. Di CentOs saya memperbaikinya dengan menjalankan
# yum install php-mysql
dan kemudian memulai kembali apache dengan# /bin/systemctl restart httpd.service
Catatan bahwa penamaan sedikit berbeda dari distro berbasis debian / ubuntu, php-> php5 dan httpd-> apache2.sumber
Saya memiliki masalah yang sama selama menjalankan tes dengan php.ini terpisah. Saya harus menambahkan baris ini ke file php.ini saya sendiri:
Perhatikan: Persis dalam urutan ini
sumber
Saya sangat merekomendasikan
mysqllnd
daripadamysql
karena Anda akan memiliki banyak masalah seperti jumlah konversi dan tipe bit mengevaluasi masalah denganmysql
ekstensi.di ubuntu instal
mysqllnd
dengan perintah berikut:sumber
Saya Memperbaiki masalah ini pada Debian saya 6. Biasanya saya baru saja menginstal
php5-common
paket. Setelah instalasi, Anda harus me-restart server web Anda (apache atau nginx tergantung yang mana yang Anda instal). Kemudian saya hanya melakukanlsof
id proses apache (lsof -p process_id
) sebagai berikut:Seperti yang Anda lihat di atas, modul-modul tersebut diinstal pada path file yang tidak dikenal atau dipandu oleh path library umum: /
usr/lib/php5/20090626/
. Untuk instalasi Anda, mungkin berbeda, tetapi hanya jalur pdo_mysql.so, pdo.so, mysqli.so. Jadi, inilah mengapa Drupal atau mesin php lain tidak dapat menemukan perpustakaan dan menunjukkan kesalahan itu:PDOException: could not find driver
Aku hanya tidak tahu mengapa ia terinstal di suatu jalan yang aneh, bagi saya itu hanya bug di script paket instalasi perpustakaan di debian 6. Aku memecahkan masalah ini dengan menciptakan simbolis untuk semua file di bawah
/usr/lib/php5/20090626/
untuk/usr/lib/php5/
dengan perintah ini:ln -s /usr/lib/php5/20090626/* /usr/lib/php5/
sumber
Ini berhasil untuk saya.
sumber
Saya menghadapi masalah yang sama setelah saya menghapus paket php5 (yang mencakup semua driver juga) untuk menginstal paket php7. Saya benar-benar menginstal paket php7 tanpa modul mysql.
Saya berhasil menyelesaikannya dengan mengetik di terminal:
1) $ pencarian pencarian apt-cache php7 yang berisi daftar semua modul, mencari melalui modul yang saya temukan,
php7.0-mysql - modul MySQL untuk PHP
2) $ sudo apt-get install php7.0-mysql
Itu dia. Ini bekerja untuk saya di sistem linux saya.
(gunakan versi php yang sesuai, milik Anda bisa php5)
sumber
Hanya satu hal lain untuk mengonfirmasi karena beberapa orang menyalin / menempelkan kode contoh dari Internet untuk memulai. Pastikan Anda memasukkan MySQL di sini:
Dalam beberapa contoh ini menunjukkan
sumber
Dalam kasus saya, saya menggunakan PDO dengan php-cli, dan itu berfungsi dengan baik.
Hanya ketika saya mencoba terhubung dari apache, saya mendapat masalah "driver yang hilang", yang saya tidak mengerti.
Sederhana
apt-get install php-mysql
menyelesaikannya. (Ubuntu 16.04 / PHP7. Kredit diberikan ke jawaban yang dipilih & komentar Ivan)Semoga bisa membantu.
sumber
Bagi mereka yang menggunakan Symfony2 / 3 dan bertanya-tanya mengapa Anda mendapatkan kesalahan ini. Jika Anda menggunakan "mapping_types", Anda mungkin mengalami kesalahan ini. Alasannya adalah "mapping_types" ditempatkan pada level yang salah. Misalnya :
"Mapping_types" ini harus ditempatkan di level ini:
saya harap ini membantu
Saya menemukan solusinya di sini: https://github.com/doctrine/DoctrineBundle/issues/327
sumber
Ke mana pun saya pergi, saya membaca bahwa jalan
extension_dir
harus diubah dariext
menjadi jalan absolut. Ini berhasil untuk saya. Namun, ketika mencoba membangun server PC kolega saya, saya harus membiarkan nilainyaext
daripada meletakkan jalur absolut.Jika Anda memang meletakkan jalur absolut dan ekstensi itu masih tidak ditemukan, pertimbangkan untuk mencoba keduanya dengan jalur absolut dan
ext
.sumber
Instalasi PHP yang salah sedang dipanggil
Saya mengalami masalah yang sama. Dan saya berharap ini akan membantu seseorang yang memiliki masalah serupa dengan saya.
Skenario
Saya membuat
phpinfo.php
file dipublic
folder dan menjalankanphpinfo()
untuk mencari lokasiphp.ini
file saya .PHP.ini Location =
c:\xampp\php\php.ini
Masalah
Panggilan
c:\xampp\htdocs> php -v
kembaliPHP 7.2.3
tetapiphpinfo.php
munculPHP 7.2.2
.Solusi
Daripada menelepon
yang memberi saya kesalahan ini, saya gunakan
dan itu berhasil.
sumber
Periksa jalur yang benar di extension_dir di Anda phpinfo ().
sumber
Saya berjuang dan berjuang dengan "apt install php-mysql php7toInfinity dan jangan lupa sqlite-what-ever's" dan tidak bisa menghilangkan pesan kesalahan ini sampai saya kembali ke dasar-dasar dan mereset file-permissions file di situs web dalam pertanyaan.
3 perintah ini mengatur ulang izin file dan folder di situs web dan membuatnya berfungsi kembali.
sumber
Saya memiliki pengecualian yang sama ketika mencoba menggunakan
pdo_sqlite
. Masalahnya adalah bahwa secara otomatis dibuat20-pdo_sqlite.ini
dan20-sqlite3.ini
symlinks (di/etc/php5/mods-enabled
) rusak.Menghapus symlink yang rusak dan menambahkannya secara manual dengan:
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
memperbaiki masalah.
sumber