我刚刚用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 Server设置)上运行良好。
这与我的PHP安装有关吗?
搜索互联网没有帮助,我得到的只是专家交流和示例,但没有解决方案。
答案 0 :(得分:209)
您需要一个名为pdo_mysql的模块。在phpinfo()中寻找以下内容,
pdo_mysql
PDO Driver for MySQL, client library version => 5.1.44
答案 1 :(得分:181)
代码中的dsn显示您正在尝试连接mysql驱动程序。您的错误消息表明此驱动程序不可用。
检查您的服务器上是否安装了mysql扩展程序。
在Ubuntu / Debian中,您检查包裹:
dpkg --get-selections | grep php | grep mysql
如果没有,请安装php5-mysql软件包。
在Ubuntu / Debian中你可以使用:
sudo apt-get install php5-mysql
sudo apt-get install php7.0-mysql
最后,要使其正常运行,您需要重新启动您的网络服务器:
sudo /etc/init.d/apache2 restart
sudo /etc/init.d/nginx restart
答案 2 :(得分:73)
更新:较新的版本应使用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服务器上),你只需要运行上面的行,然后就可以了。
答案 3 :(得分:26)
对于拥有PHP 7.0的较新版本的Ubuntu,您可以获得php-mysql
包:
sudo apt-get install php-mysql
然后重启服务器:
sudo service apache2 restart
答案 4 :(得分:21)
在我的Windows机器上,我必须在php.ini中给出扩展目录的绝对路径:
extension_dir = "c:\php5\ext"
答案 5 :(得分:16)
我有同样的问题。解决方案取决于操作系统。就我而言,我有debian,所以要解决它:
安装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
这解决了我的问题
答案 6 :(得分:14)
在Ubuntu上执行
sudo apt-get install php5-mysql
答案 7 :(得分:9)
sudo apt-get install php-mysql
在ubuntu和php 7上运行良好
答案 8 :(得分:5)
将这些添加到php.ini中时,请确保在db驱动程序dll之前首先引用php_pdo.dll,否则这也会导致此错误消息。像这样添加它们:
[PHP_PDO]
extension=php_pdo.dll
[PHP_PDO_MYSQL]
extension=php_pdo_mysql.dll
答案 9 :(得分:5)
如果MySQL和驱动程序安装正确,你检查了你的php.ini(用phpinfo()检查正确的位置)吗?
答案 10 :(得分:4)
对于PHP 5.5
上的CentOS
,我通过安装php55-mysqlnd
软件包解决了此问题。
sudo yum -y install php55w-mysqlnd # For Webtatic
sudo yum -y install php55u-mysqlnd # For Remi
有关安装的帮助,请编写注释,因为它取决于系统上PHP的安装方式。可用的回购邮件是webtatic
和remi
。
答案 11 :(得分:3)
对于Windows 8.1 / 10:\\ php.ini文件,你应该取消注释行" extension = pdo_mysql"
答案 12 :(得分:3)
我花了最后一天试图找出为什么我收到以下错误。我正在运行Ubuntu 14.04。
问题:
我注意到我的PHP-CLI版本运行的是php7.0但是php_info()(网络版)显示的是PHP 5.5.9。即使php_info()表示启用了pdo,使用命令行(CLI)也无法识别pdo_mysql命令。事实证明,我的旧版本启用了mysql,但未启用CLI版本。我所做的只是为php7.0安装mysql,它能够工作。
这是有用的:
检查版本:
php -v
为php7.0安装mysql
sudo apt-get install php7.0-mysql
1)确保您的CLI版本与您的网络版本相同 2)如果它们不同,请确保您的CLI版本具有mysql插件,因为它没有默认配置。
答案 13 :(得分:2)
问题是缺少php到mysql库。在CentOs我通过运行修复它
# yum install php-mysql
然后使用# /bin/systemctl restart httpd.service
重新启动apache请注意,命名与基于debian / ubuntu的发行版,php-> php5和httpd-> apache2略有不同。
答案 14 :(得分:2)
在我的情况下,我的DSN字符串不正确,特别是它不包含mysql://.
我本来期望一个不同的错误消息,可能类似'DSN字符串不指定驱动程序/协议。'
将mysql://
添加到DSN字符串的开头解决了问题。
答案 15 :(得分:2)
检查php配置文件中的extension_dir是否设置正确。尝试评论/取消注释某些扩展,看看它是否反映在phpinfo()上。 如果没有,则无法加载php配置文件(错误的位置)extension_dir被注释或设置为错误的位置。
答案 16 :(得分:2)
我非常推荐mysqllnd
而不是mysql
,因为您会遇到许多问题,例如数字转换和位类型评估mysql
扩展名的问题。
在ubuntu上使用以下命令安装mysqllnd
:
sudo apt-get install php5-mysqlnd
答案 17 :(得分:1)
我在Debian 6上修复了这个问题。
通常我刚刚安装了php5-common
包。安装后,您必须重新启动Web服务器(apache或nginx,具体取决于您安装的服务器)。
然后我只对apache进程id(lsof
)执行lsof -p process_id
,如下所示:
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
如上所示,模块安装在未知的文件路径上或由公共库路径引导:/ usr/lib/php5/20090626/
。对于您的安装,它可能不同,但只有pdo_mysql.so,pdo.so,mysqli.so的路径。所以,这就是为什么Drupal或任何其他php引擎无法找到该库并显示错误:PDOException: could not find driver
我只是不知道为什么它安装在这样一个奇怪的路径上,对我来说这只是debian 6中库包安装脚本中的一个错误。
我通过为/usr/lib/php5/20090626/
下的所有文件创建符号来解决此问题
/usr/lib/php5/
使用此命令:
ln -s /usr/lib/php5/20090626/* /usr/lib/php5/
答案 18 :(得分:1)
PHP Fatal error: Uncaught PDOException: could not find driver
我在“ apt install php-mysql php7toInfinity并且不忘sqlite-what-ever's”方面苦苦挣扎,直到我回到基础并重置了文件权限后,才摆脱了这个错误消息。有问题的网站。
这3个命令可重置网站上的文件和文件夹权限,并使它再次运行。
cd /var/www/web-site-name.com/web/
# find (sub) directories and change permissions
find . -type d -exec chmod 755 {} \;
# find files and change permissions
find . -type f -exec chmod 664 '{}' \;
答案 19 :(得分:1)
在您的phpinfo()中检查extension_dir中的正确路径。
答案 20 :(得分:1)
错误的PHP安装被称为
我遇到了同样的问题。我希望这对遇到与我类似问题的人有所帮助。
场景
OS = Windows 10
Platform = XAMPP
PHP Version = 7 (Multiple Version seem to have been installed in the PC)
我在phpinfo.php
文件夹中创建了public
文件,然后运行phpinfo()
查找我的php.ini
文件的位置。
PHP.ini位置= c:\xampp\php\php.ini
问题
调用c:\xampp\htdocs> php -v
返回了PHP 7.2.3
,但是phpinfo.php
显示了PHP 7.2.2
。
解决方案
不用打电话
php artisan migrate:install
这给了我这个错误,我用了
c:\xampp\php\php artisan migrate:install
它奏效了。
答案 21 :(得分:1)
我到处都读到extension_dir
的路径应该从ext
更改为绝对路径。它对我有用。但是,在尝试构建同事PC的服务器时,我不得不将值设为ext
而不是放置绝对路径。
如果您确实设置了绝对路径并且仍未找到扩展名,请考虑使用绝对路径和ext
进行扩展。
答案 22 :(得分:1)
对于那些使用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
我希望这会有所帮助
我在这里找到了解决方案:https://github.com/doctrine/DoctrineBundle/issues/327
答案 23 :(得分:1)
在我的情况下,我使用PDO和php-cli,它运行良好。
只有当我尝试从apache连接时,才会遇到“缺少驱动程序”的问题,我不太明白。
一个简单的apt-get install php-mysql
解决了它。 (Ubuntu 16.04 / PHP7。积分转到所选答案和Ivan的评论)
希望它可以提供帮助。
答案 24 :(得分:1)
在使用单独的php.ini运行测试期间,我遇到了同样的问题。我不得不将这些行添加到我自己的php.ini文件中:
[PHP]
extension = mysqlnd.so
extension = pdo.so
extension = pdo_mysql.so
注意:正好按此顺序
答案 25 :(得分:1)
另外还有一件事需要确认,因为有些人正在从互联网上复制/粘贴示例代码以开始使用。确保你在这里输入了MySQL:
... $dbh = new PDO ("mysql: ...
在某些例子中,这显示了
$dbh = new PDO ("dblib ...
答案 26 :(得分:1)
我在删除php5软件包(包括所有驱动程序)之后遇到了同样的问题,以便安装php7软件包。我实际上安装了没有mysql模块的php7包。
我设法通过在终端输入来解决它:
1)$ apt-cache搜索php7 其中列出了所有模块,查看了我找到的模块,
php7.0-mysql - 用于PHP的MySQL模块
2)$ sudo apt-get install php7.0-mysql
就是这样。它在我的linux系统中对我有用。
(使用适当的php版本,你的可能是php5)
答案 27 :(得分:0)
如果您使用sqlite进行测试,则需要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
答案 28 :(得分:0)
对于Linux Mint
我在使用PhpBrew(5.5.9 / 7.0.14)并尝试创建PDO连接时遇到了同样的问题。
在我尝试了这篇文章的大部分解决方案之后,我做了以下几点:
关闭PhpBrew
执行sudo apt-get install php7.0
(Linux Mint 17.2 / PHP7.0.16) - 安装了新的php版本
答案 29 :(得分:0)
如果您阅读了以上所有答案,但仍然无法正常工作...
确保您的PHP PDO连接字符串正确。不像我的:
$dbh = new PDO('"mysql:host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASS)
错误消息中没有信息,找不到哪个驱动程序。
重新安装所有可能的PDO和MySQL库后,我发现连接字符串开头有“ 。
答案 30 :(得分:0)
尝试使用pdo_sqlite
时遇到了同样的异常。问题是自动创建的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
中查找配置
答案 31 :(得分:0)
遇到了同样的问题,因为我忘记进入虚拟机。如果我这样进入本地目录:
cd /www/homestead/my_project
php artisan migrate
该错误将出现。但是它可以在我的虚拟机上运行
cd ~/homestead
vagrant ssh
cd /www/homestead/my_project
php artisan migrate
答案 32 :(得分:0)
检查模块是否适用于php -m | grep pdo_mysql
。
否则,对于PHP 7.2,可以使用sudo apt install php7.2-mysql
安装相关的软件包。
在其他PHP版本和程序包管理器上使用类似的命令。
答案 33 :(得分: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
这对我有用。
答案 34 :(得分:-1)
对我来说,解决方案是安装php,请不要正确配置环境变量和php.ini文件。进行这两次更正,extension = pdo_mysql.so
的未划定轮廓会起作用
答案 35 :(得分:-2)
我通过在“IIS信息服务 - &gt; PHP Exstention”中启用php_pdo_mysql.ddl解决了这个问题。
答案 36 :(得分:-2)
有同样的问题,只是想通了,网站在MAMP的php下运行,但是当你在命令中调用时,它会运行mac(如果没有修改bash路径)。当mac没有这些扩展时你会遇到问题。
运行php -i查找已加载的扩展,然后安装那些错过的扩展。 或运行'/Applications/MAMP/bin/php/php5.3.6/bin/php artisan {your command}'来使用MAMP的
答案 37 :(得分:-3)
在php.ini中的; extension = php_pdo_mysql.dll 之前删除分号并保存。 别忘了重启xampp Apache和Mysql。
答案 38 :(得分:-6)
在我的情况下(Windows XP + Apache2.2 + PHP 5.4.31)我更改了PHPIniDir
中的httpd.conf
以解决此问题:
来自:
"C:\php5\"
到:
"C:/php5/"