Helpex - Trao đổi & giúp đỡ Đăng nhập
245

Tôi vừa cài đặt Debian Lenny với Apache, MySQL và PHP và tôi đang nhận được PDOException could not find driver.

Đây là dòng mã cụ thể mà nó đang đề cập đến:

$dbh = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASS)

DB_HOST, DB_NAME, DB_USER, Và DB_PASSlà hằng số mà tôi đã xác định. Nó hoạt động tốt trên máy chủ sản xuất (và trên thiết lập Máy chủ Ubuntu trước đây của tôi).

Đây có phải là một cái gì đó để làm với cài đặt PHP của tôi?

Tìm kiếm trên internet không giúp được gì, tất cả những gì tôi nhận được là các chuyên gia - trao đổi và ví dụ, nhưng không có giải pháp.

245 hữu ích 4 bình luận 662k xem chia sẻ
34 trả lời 34
206

Bạn cần phải có một mô-đun gọi là pdo_mysql. Tìm kiếm theo sau trong phpinfo (),

pdo_mysql

PDO Driver for MySQL, client library version => 5.1.44
206 hữu ích 5 bình luận chia sẻ
176

Mã DSn trong mã của bạn cho thấy bạn đang cố gắng kết nối với trình điều khiển mysql. Thông báo lỗi của bạn chỉ ra rằng trình điều khiển này không có sẵn.

Kiểm tra xem bạn đã cài đặt tiện ích mở rộng mysql trên máy chủ của mình chưa.

Trong Ubuntu / Debian bạn kiểm tra gói với:

dpkg --get-selections | grep php | grep mysql

Cài đặt gói php5-mysql nếu bạn không có nó.

Trong Ubuntu / Debian bạn có thể sử dụng:

  • PHP5: sudo apt-get install php5-mysql
  • PHP7: sudo apt-get install php7.0-mysql

Cuối cùng, để làm cho nó hoạt động, bạn sẽ cần phải khởi động lại máy chủ web của mình:

  • Apache: sudo /etc/init.d/apache2 restart
  • Nginx: sudo /etc/init.d/nginx restart
176 hữu ích 5 bình luận chia sẻ
72

Cập nhật : phiên bản mới hơn nên sử dụng php-sqlite3gói thay vì php5-sqlite. Vì vậy, hãy sử dụng cái này, nếu bạn đang sử dụng phiên bản Ubuntu gần đây:

sudo apt-get install sqlite php-sqlite3

Câu trả lời gốc cho câu hỏi ở đây:

sudo apt-get install sqlite php5-sqlite
sudo /etc/init.d/apache2 restart

Nếu phpinfo () của bạn không hiển thị dòng pdo_sqlite (trong trường hợp của tôi, trên Máy chủ Ubuntu của tôi), bạn chỉ cần chạy các dòng trên và sau đó bạn sẽ ổn.

72 hữu ích 5 bình luận chia sẻ
24

Đối với các phiên bản Ubuntu mới hơn có PHP 7.0, bạn có thể nhận php-mysqlgói:

sudo apt-get install php-mysql

Sau đó khởi động lại máy chủ của bạn:

sudo service apache2 restart
24 hữu ích 0 bình luận chia sẻ
21

Trên máy Windows của tôi, tôi đã phải đưa đường dẫn tuyệt đối đến thư mục mở rộng trong php.ini của mình:

extension_dir = "c:\php5\ext"

21 hữu ích 3 bình luận chia sẻ
15

Tôi gặp vấn đề tương tự. Giải pháp phụ thuộc vào HĐH. Trong trường hợp của tôi, tôi có debian, vì vậy để giải quyết nó:

  • Đã cập nhật phiên bản php của tôi từ ( php5 lên php7 )
  • Cài đặt php-mysql và php7.0-mysql

    apt-get install php-mysql
    apt-get install php7.0-mysql
  • Tôi đã chỉnh sửa php.inivị trí của mình tại /etc/php/7.0/apache2/php.ini

    uncomment the line : extension=php_pdo_mysql.dll
  • Sau đó khởi động lại apache:

    service apache2 restart

Điều này giải quyết vấn đề của tôi

15 hữu ích 1 bình luận chia sẻ
14

Trên Ubuntu chỉ cần thực thi

sudo apt-get install php5-mysql
14 hữu ích 3 bình luận chia sẻ
9
sudo apt-get install php-mysql 

hoạt động tốt trên Ubuntu và php 7

9 hữu ích 1 bình luận chia sẻ
5

Bạn đã kiểm tra php.ini của mình (kiểm tra vị trí chính xác với phpinfo ()) nếu MySQL và trình điều khiển được cài đặt đúng chưa?

5 hữu ích 1 bình luận chia sẻ
5

Khi thêm chúng vào php.ini, đảm bảo tham chiếu php_pdo.dll trước tiên trước các trình điều khiển db dll nếu không điều này cũng sẽ gây ra thông báo lỗi này. Thêm chúng như thế này:

[PHP_PDO]
extension=php_pdo.dll
[PHP_PDO_MYSQL]
extension=php_pdo_mysql.dll
5 hữu ích 1 bình luận chia sẻ
4

Đối với PHP 5.5trên CentOStôi cố định này bằng cách cài đặt php55-mysqlndgói.

sudo yum -y install php55w-mysqlnd # For Webtatic
sudo yum -y install php55u-mysqlnd # For Remi

Để được trợ giúp cài đặt, hãy viết bình luận vì nó phụ thuộc vào cách PHP được cài đặt trên hệ thống của bạn. Có sẵn của repo webtaticremi.

4 hữu ích 0 bình luận chia sẻ
3

Tôi đã dành ngày cuối cùng để cố gắng tìm ra lý do tại sao tôi nhận được lỗi sau. Tôi đang chạy Ubuntu 14.04.

Vấn đề:
Tôi nhận thấy rằng phiên bản PHP-CLI của tôi đang chạy php7.0 nhưng php_info () (phiên bản web) đang hiển thị php 5.5.9. Mặc dù php_info () cho biết pdo đã được bật, nhưng sử dụng dòng lệnh (CLI) sẽ không nhận ra lệnh pdo_mysql. Hóa ra mysql đã được kích hoạt cho phiên bản cũ của tôi chứ không phải phiên bản CLI. Tất cả những gì tôi đã làm là cài đặt mysql cho php7.0 và nó đã có thể hoạt động.

Đây là những gì đã làm việc:

Để kiểm tra phiên bản:

php -v

Để cài đặt mysql cho php7.0

sudo apt-get install php7.0-mysql

1
.

3 hữu ích 0 bình luận chia sẻ
3

đối với Windows 8.1 / 10 trong: \ \ Tập tin php.ini, bạn nên bỏ dòng "mở rộng = pdo_mysql"

3 hữu ích 0 bình luận chia sẻ
2

Kiểm tra xem extension_dir trong tệp cấu hình php được đặt chính xác. Hãy thử nhận xét / bỏ ghi chú một số tiện ích mở rộng và xem liệu nó có được phản ánh trên phpinfo () không. Nếu không, thì tệp cấu hình php không thể được tải (vị trí sai) extension_dir được nhận xét hoặc đặt thành vị trí sai.

2 hữu ích 0 bình luận chia sẻ
2

Trong trường hợp của tôi, chuỗi DSN của tôi không chính xác, cụ thể là nó không chứa mysql://. Tôi sẽ mong đợi một thông báo lỗi khác, có lẽ giống như 'chuỗi DSN không chỉ định trình điều khiển / giao thức.'

Thêm mysql://vào đầu chuỗi DSN đã giải quyết vấn đề.

2 hữu ích 0 bình luận chia sẻ
2

Vấn đề là thiếu thư viện php to mysql. Trong CentO tôi đã sửa nó bằng cách chạy # yum install php-mysqlvà sau đó khởi động lại apache bằng # /bin/systemctl restart httpd.serviceLưu ý rằng việc đặt tên hơi khác so với các distro dựa trên debian / ub Ubuntu, php-> php5 và httpd-> apache2.

2 hữu ích 0 bình luận chia sẻ
2

Tôi thực sự khuyên bạn mysqllndthay mysqlvì vì bạn sẽ có rất nhiều vấn đề như chuyển đổi số và loại bit đánh giá vấn đề với mysqltiện ích mở rộng.

trên cài đặt Ubuntu mysqllndvới lệnh sau:

sudo apt-get install php5-mysqlnd
2 hữu ích 0 bình luận chia sẻ
1

Tôi đã khắc phục sự cố này trên Debian 6. Thông thường tôi vừa cài đặt php5-commongói. Sau khi cài đặt, bạn phải khởi động lại máy chủ web của mình (apache hoặc nginx tùy thuộc vào cái nào bạn đã cài đặt). Sau đó, tôi chỉ thực hiện một lsofquá trình apache id ( lsof -p process_id) như sau:

sudo lsof -p 1399   #replace 1399 by your apache process id
apache2 1399 root  mem    REG  254,2    80352 227236 /usr/lib/php5/20090626/xmlrpc.so
apache2 1399 root  mem    REG  254,2   166496 227235 /usr/lib/php5/20090626/suhosin.so
apache2 1399 root  mem    REG  254,2    31120 227233 /usr/lib/php5/20090626/pdo_mysql.so
apache2 1399 root  mem    REG  254,2   100776 227216 /usr/lib/php5/20090626/pdo.so
apache2 1399 root  mem    REG  254,2   135864 227232 /usr/lib/php5/20090626/mysqli.so

Như bạn có thể thấy ở trên, các mô-đun được cài đặt trên một đường dẫn tệp không được biết hoặc được hướng dẫn bởi đường dẫn thư viện chung: / usr/lib/php5/20090626/. Đối với cài đặt của bạn, nó có thể khác, nhưng chỉ có đường dẫn của pdo_mysql.so, pdo.so, mysqli.so. Vì vậy, đây là lý do tại sao Drupal hoặc bất kỳ công cụ php nào khác không thể tìm thấy thư viện và hiển thị lỗi đó:PDOException: could not find driver

Tôi chỉ không biết tại sao nó được cài đặt trên một con đường kỳ lạ như vậy, đối với tôi nó chỉ là một lỗi trong các kịch bản cài đặt gói thư viện trong debian 6. Tôi giải quyết vấn đề này bằng cách tạo ra một biểu tượng cho tất cả các file dưới /usr/lib/php5/20090626/để /usr/lib/php5/bằng lệnh này:

ln -s /usr/lib/php5/20090626/* /usr/lib/php5/

1 hữu ích 1 bình luận chia sẻ
1

Tôi đã gặp vấn đề tương tự sau khi tôi gỡ bỏ gói php5 (bao gồm tất cả các trình điều khiển) để cài đặt gói php7. Tôi thực sự đã cài đặt gói php7 mà không có mô-đun mysql.

Tôi quản lý để giải quyết nó bằng cách gõ vào thiết bị đầu cuối:

1) $ apt-cache search php7 liệt kê tất cả các mô-đun, xem qua các mô-đun tôi tìm thấy,

php7.0-mysql - Mô-đun MySQL cho PHP

2) $ sudo apt-get cài đặt php7.0-mysql

Đó là nó. Nó làm việc cho tôi trong hệ thống linux của tôi.

(sử dụng phiên bản php thích hợp, phiên bản của bạn có thể là php5)

1 hữu ích 0 bình luận chia sẻ
1

Chỉ cần một điều khác để xác nhận là một số người đang sao chép / dán mã ví dụ từ Internet để bắt đầu. Hãy chắc chắn rằng bạn đã nhập MySQL vào đây:

... $dbh = new PDO ("mysql: ...  

Trong một số ví dụ, điều này cho thấy

$dbh = new PDO ("dblib ...
1 hữu ích 0 bình luận chia sẻ
1

Tôi gặp vấn đề tương tự trong quá trình chạy thử nghiệm với php.ini riêng. Tôi đã phải thêm các dòng này vào tệp php.ini của riêng mình:

[PHP]
extension = mysqlnd.so
extension = pdo.so
extension = pdo_mysql.so

Lưu ý: Chính xác theo thứ tự này

1 hữu ích 0 bình luận chia sẻ
1

Trong trường hợp của tôi, tôi đã sử dụng PDO với php-cli và nó hoạt động tốt.

Chỉ khi tôi cố gắng kết nối từ apache, tôi mới gặp phải vấn đề "thiếu tài xế", điều mà tôi không hiểu lắm.

Một cách đơn giản đã apt-get install php-mysqlgiải quyết nó. (Ubuntu 16.04 / PHP7. Tín dụng đi đến câu trả lời được chọn & nhận xét của Ivan)

Hy vọng nó có thể giúp đỡ.

1 hữu ích 0 bình luận chia sẻ
1

Đối với những người sử dụng Symfony2 / 3 và tự hỏi tại sao bạn lại gặp lỗi này. Nếu bạn đang sử dụng "maps_types", bạn có thể gặp phải lỗi này. Lý do là "maps_types" được đặt ở cấp độ sai. Ví dụ :

doctrine:
  dbal:
    mapping_types:
        set: string

"Ánh xạ_types" này phải được đặt ở cấp độ này:

doctrine:
dbal:
    #To counter the error caused by 'mapping_types'
    connections:
        default:
            server_version: %database_server_version%
            mapping_types:
                set: string

Tôi hi vọng cái này giúp được

Tôi tìm thấy giải pháp ở đây: https://github.com/doctrine/DoctrineBundle/issues/327

1 hữu ích 0 bình luận chia sẻ
1

Ở mọi nơi tôi đến tôi đều đọc rằng con đường extension_dirnên được thay đổi từ extmột con đường tuyệt đối. Nó làm việc cho tôi. Tuy nhiên, khi cố gắng xây dựng một máy chủ cho PC của đồng nghiệp của tôi, tôi đã phải để giá trị extthay vì đặt một đường dẫn tuyệt đối.

Nếu bạn đã đặt một đường dẫn tuyệt đối và nó vẫn không tìm thấy tiện ích mở rộng, hãy xem xét thử cả hai với đường dẫn tuyệt đối và ext.

1 hữu ích 0 bình luận chia sẻ
1

Cài đặt PHP không chính xác đã được gọi

Tôi đã trải qua vấn đề tương tự. Và tôi hy vọng điều này sẽ giúp được ai đó đang gặp vấn đề tương tự như tôi.

Kịch bản

OS = Windows 10  
Platform = XAMPP  
PHP Version = 7 (Multiple Version seem to have been installed in the PC)  

Tôi đã tạo phpinfo.phptập tin trong publicthư mục và chạy phpinfo()để tìm vị trí php.initập tin của tôi .

Vị trí PHP.ini = c:\xampp\php\php.ini

Vấn đề
gọi c:\xampp\htdocs> php -vlại PHP 7.2.3nhưng phpinfo.phpcho thấy PHP 7.2.2.

Giải pháp
thay vì gọi

php artisan migrate:install   

Tôi đã sử dụng lỗi này, tôi đã sử dụng

c:\xampp\php\php artisan migrate:install

va no đa hoạt động.

1 hữu ích 0 bình luận chia sẻ
1

Nếu bạn đọc tất cả các câu trả lời ở trên và nó vẫn không hoạt động ...

Hãy chắc chắn rằng chuỗi kết nối PDO PHP của bạn vẫn ổn. Không giống như của tôi:

$dbh = new PDO('"mysql:host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASS)

Không có thông tin trong thông báo lỗi những gì trình điều khiển không được tìm thấy.

Sau khi cài đặt lại tất cả các thư viện PDO và MySQL có thể, tôi phát hiện ra rằng " bắt đầu chuỗi kết nối của tôi.

1 hữu ích 0 bình luận chia sẻ
0
$DB_TYPE = 'mysql'; //Type of database<br>
$DB_HOST = 'localhost'; //Host name<br>
$DB_USER = 'root'; //Host Username<br>
$DB_PASS = ''; //Host Password<br>
$DB_NAME = 'database_name'; //Database name<br><br>

$dbh = new PDO("$DB_TYPE:host=$DB_HOST; dbname=$DB_NAME;", $DB_USER, $DB_PASS); // PDO Connection

Điều này làm việc cho tôi.

0 hữu ích 2 bình luận chia sẻ
0

Tôi đã có ngoại lệ tương tự khi cố gắng sử dụng pdo_sqlite. Vấn đề là các liên kết được tạo tự động 20-pdo_sqlite.ini20-sqlite3.inisymlink (in /etc/php5/mods-enabled) đã bị hỏng.

Xóa các liên kết tượng trưng bị hỏng và thêm chúng bằng tay với:

  • 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

đã khắc phục sự cố.

Lưu ý: điều này sẽ không hoạt động đối với các phiên bản php cũ hơn vì chúng không tìm kiếm cấu hình trong /etc/php5/mods-enabled

0 hữu ích 0 bình luận chia sẻ
0

Nếu bạn đang sử dụng sqlite để kiểm tra, bạn sẽ cần ổ đĩa pdo php sqlite. Bạn có thể cài đặt chúng như dưới đây.

Dành cho Ubuntu 14.04

sudo apt-get install php5-sqlite
sudo service apache2 restart

Trong Ubuntu 16.04 không có php5-sqlite

sudo apt-get install php7.0-sqlite
sudo service apache2 restart
0 hữu ích 0 bình luận chia sẻ
0

Dành cho Linux Mint

Tôi gặp vấn đề tương tự trong khi sử dụng PhpBrew (5.5.9 / 7.0.14) và cố gắng tạo kết nối PDO.

Sau khi tôi đã thử hầu hết các giải pháp trên bài đăng này, tôi đã làm như sau:

  1. Tắt nguồn PhpBrew

  2. Đã thực hiện sudo apt-get install php7.0(Linux Mint 17.2 / PHP7.0.16) - đã cài đặt phiên bản php mới

0 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ php mysql pdo lamp , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading