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/"