PDOException“找不到驱动程序”
我刚刚用Apache,MySQL和PHP安装了Debian Lenny,我收到了一个PDOException could not find driver 。 
这是它所指的特定的代码行:
 $dbh = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASS) 
  DB_HOST , DB_NAME , DB_USER和DB_PASS是我定义的常量。 它在生产服务器(以及我之前的Ubuntu服务器设置)上工作正常。 
这是我的PHP安装?
search互联网没有帮助,我得到的只是专家交stream和例子,但没有解决scheme。
您需要有一个名为pdo_mysql的模块。 在phpinfo()中寻找以下内容,
 pdo_mysql PDO Driver for MySQL, client library version => 5.1.44 
代码中的dsn显示你正在尝试连接mysql驱动程序。 您的错误消息表明此驱动程序不可用。
检查你的服务器上是否安装了mysql扩展。
在Ubuntu / Debian中,您检查包装:
 dpkg --get-selections | grep php | grep mysql 
如果没有,请安装php5-mysql软件包。
在Ubuntu / Debian中,您可以使用:
-   PHP5: sudo apt-get install php5-mysql
-   PHP7: sudo apt-get install php7.0-mysql
最后,为了使其工作,您将需要重新启动您的networking服务器:
-   Apache: sudo /etc/init.d/apache2 restart
-   Nginx: sudo /etc/init.d/nginx restart
  更新 :新版本应该使用php-sqlite3包而不是php5-sqlite 。 所以使用这个,如果你使用的是最近的ubuntu版本: 
 sudo apt-get install sqlite php-sqlite3 
问题的原始答案在这里:
 sudo apt-get install sqlite php5-sqlite sudo /etc/init.d/apache2 restart 
如果你的phpinfo()没有显示pdo_sqlite行(在我的情况下,在我的Ubuntu服务器上),你只需要运行上面的行,然后你就可以走了。
在我的Windows机器上,我必须给我的php.ini中的扩展目录的绝对path:
 extension_dir = "c:\php5\ext" 
在Ubuntu上执行
 sudo apt-get install php5-mysql 
 对于有PHP 7.0的较新版本的Ubuntu,你可以得到php-mysql包: 
 sudo apt-get install php-mysql 
然后重新启动服务器:
 sudo service apache2 restart 
我遇到过同样的问题。 解决scheme取决于操作系统。 在我的情况下,我有debian,所以要解决它:
- 更新我的php版本从php5到php7( 在这里input链接描述 )
- 
安装php-mysql和php7.0-mysql apt-get install php-mysql apt-get install php7.0-mysql
- 
我编辑了我的php.ini,位于/etc/php/7.0/apache2/php.ini uncomment the line : extension=php_pdo_mysql.dll
- 
然后重新启动apache: service apache2 restart
这解决了我的问题
 sudo apt-get install php-mysql 
在Ubuntu和PHP 7上运行良好
你检查你的php.ini(检查正确的位置与phpinfo())如果MySQL和驱动程序安装正确?
当把这些添加到你的php.ini中时,确保php_pdo.dll引用是在db驱动程序dll之前,否则这也会导致这个错误信息。 像这样添加它们:
 [PHP_PDO] extension=php_pdo.dll [PHP_PDO_MYSQL] extension=php_pdo_mysql.dll 
 对于CentOS上的PHP 5.5 ,我通过安装php55-mysqlnd包来解决这个问题。 
 sudo yum -y install php55w-mysqlnd # For Webtatic sudo yum -y install php55u-mysqlnd # For Remi 
  为了帮助安装,编写一个注释,因为它取决于您的系统上安装PHP的方式。  可用的回购是webtatic和webtatic 。 
检查phpconfiguration文件中的extension_dir是否设置正确。 尝试评论/取消注释一些扩展名,看它是否反映在phpinfo()。 如果没有,那么无论是PHP的configuration文件无法加载(错误的位置)extension_dir被注释或设置为错误的位置。
 在我的情况下,我的DSNstring不正确,特别是它不包含mysql://. 我会期望一个不同的错误消息,也许像'DSNstring不指定驱动程序/协议。 
 将mysql://添加到DSNstring的开头解决了问题。 
 问题是一个缺less的PHP到MySQL库。 在CentOs中,我通过运行#yum # yum install php-mysql ,然后用# /bin/systemctl restart httpd.service启动apache来修复它。 # /bin/systemctl restart httpd.service请注意,命名与基于debian / ubuntu的发行版有所不同,php-> php5和httpd-> apache2 。 
 我极力推荐mysqllnd而不是mysql因为你会有很多问题,如数字转换和位types评估与mysql扩展的问题。 
 在Ubuntu上用以下命令安装mysqllnd : 
 sudo apt-get install php5-mysqlnd 
我花了最后一天,试图找出为什么我得到以下错误。 我正在运行Ubuntu 14.04。
  问题: 
 我注意到我的PHP-CLI版本运行的是php7.0,但是php_info()(网页版本)显示的是php 5.5.9。 尽pipephp_info()表示启用了pdo,但使用命令行(CLI)却不能识别pdo_mysql命令。 事实certificate,我的旧版本,而不是CLI版本启用了MySQL。 我所做的只是为php7.0安装mysql,它能够工作。 
这是什么工作:
要检查版本:
 php -v 
为php7.0安装mysql
 sudo apt-get install php7.0-mysql 
  1)确保您的CLI版本与您的网页版本相同 
  2)如果它们不同,请确保您的CLI版本具有mysql插件,因为它没有作为默认值附带。 
 我在Debian 6上修正了这个问题。通常我只是安装了php5-common软件包。 安装完成后,您必须重新启动您的networking服务器(apache或nginx,取决于您安装的是哪一个)。 然后,我只是在apache进程id( lsof -p process_id )上做一个lsof ,如下所示: 
 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 
 正如您在上面看到的那样,这些模块安装在一个不知道的文件path上,或者被公共库path指引:/ usr/lib/php5/20090626/ 。 对于您的安装,它可能会有所不同,但只有pdo_mysql.so,pdo.so,mysqli.so的path。 所以,这就是为什么Drupal或任何其他PHP引擎无法find该库,并显示错误: PDOException: could not find driver 
 我只是不知道为什么它被安装在这样一个奇怪的path,对我来说,这只是在debian 6的库包安装脚本中的一个错误。我通过为/usr/lib/php5/20090626/下的所有文件创build一个符号解决了这个问题。 /usr/lib/php5/20090626/ to /usr/lib/php5/用这个命令: 
 ln -s /usr/lib/php5/20090626/* /usr/lib/php5/ 
 $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 
这对我有效。
我删除了php5软件包(包括所有的驱动程序)以便安装php7软件包后面临同样的问题。 我实际上安装了php7包,没有一个mysql模块。
我设法通过在terminal上键入来解决它:
1)$ apt-cache search php7其中列出了所有的模块,通过我find的模块,
php7.0-mysql – PHP的MySQL模块
2)$ sudo apt-get install php7.0-mysql
而已。 它在我的linux系统中为我工作。
(使用适当的PHP版本,你可能是php5)
在我的情况下,我用php-cli使用PDO,它工作正常。
只有当我试图从apache连接,我得到了“我不明白的驱动程序”的问题,我不明白。
 一个简单的apt-get install php-mysql解决了它。  (Ubuntu 16.04 / PHP7。学分转到选定的答案和Ivan的评论) 
希望它可以帮助。
对于那些使用Symfony2 / 3并想知道为什么你会得到这个错误。 如果您使用“mapping_types”,则可能会遇到此错误。 原因是“mapping_types”被放置在错误的级别。 例如 :
 doctrine: dbal: mapping_types: set: string 
这个“mapping_types”必须放在这个级别:
 doctrine: dbal: #To counter the error caused by 'mapping_types' connections: default: server_version: %database_server_version% mapping_types: set: string 
我希望这有帮助
我在这里find了解决scheme: https : //github.com/doctrine/DoctrineBundle/issues/327
 尝试使用pdo_sqlite时,我遇到了同样的exception。 问题是自动创build的20-pdo_sqlite.ini和20-sqlite3.ini符号链接(在/etc/php5/mods-enabled )被破坏。 
删除损坏的符号链接并手动添加它们:
-  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
解决了这个问题。
注意:这不适用于较老的php版本,因为他们没有在
/etc/php5/mods-enabled寻找configuration
还有一件事要确认,就是有些人从互联网复制/粘贴示例代码开始。 确保你在这里input了MySQL:
 ... $dbh = new PDO ("mysql: ... 
这在一些例子中显示
 $dbh = new PDO ("dblib ... 
在使用单独的php.ini运行testing期间,我遇到了同样的问题。 我不得不将这些行添加到我自己的php.ini文件中:
 [PHP] extension = mysqlnd.so extension = pdo.so extension = pdo_mysql.so 
注意:完全按照这个顺序
如果您正在使用sqlite进行testing,您将需要php sqlite pdo驱动器。 您可以按如下所示安装它们。
对于Ubuntu 14.04
 sudo apt-get install php5-sqlite sudo service apache2 restart 
 在Ubuntu 16.04中没有php5-sqlite 
 sudo apt-get install php7.0-sqlite sudo service apache2 restart 
对于Linux Mint
在使用PhpBrew(5.5.9 / 7.0.14)并尝试创buildPDO连接时,我遇到了同样的问题。
在我尝试了这篇文章的大部分解决scheme后,我做了以下工作:
- 
closuresPhpBrew 
- 
执行 sudo apt-get install php7.0(Linux Mint 17.2 / PHP7.0.16) – 安装了新鲜的php版本
有同样的问题,只是计算,网站运行在MAMP的PHP下,但是当你调用命令,它运行的Mac的(如果没有bashpath修改)。 当mac没有这些扩展名时,你将会遇到问题。
运行php -i查找加载的扩展,并安装那些你错过的。 或者运行“/Applications/MAMP/bin/php/php5.3.6/bin/php artisan {your command}”来使用MAMP
我通过在“IIS信息服务 – > PHP Exstention”中启用php_pdo_mysql.ddl来解决这个问题。
删除之前的分号; extension = php_pdo_mysql.dll在php.ini中保存。 别忘了重启xampp Apache和Mysql。
 在我的情况下(Windows XP + Apache2.2 + PHP 5.4.31),我改变了httpd.conf PHPIniDir来解决这个问题: 
从:
 "C:\php5\" 
至:
 "C:/php5/"