Php PDO异常“;找不到驱动程序”;

Php PDO异常“;找不到驱动程序”;,php,mysql,pdo,lamp,Php,Mysql,Pdo,Lamp,我刚刚用Apache、MySQL和PHP安装了Debian Lenny,我收到一个PDO异常找不到驱动程序 这是它所指的特定代码行: $dbh=new-PDO('mysql:host='.DB\u-host';dbname='.DB\u-NAME,DB\u-USER,DB\u-PASS) DB\u HOST、DB\u NAME、DB\u USER和DB\u PASS是我定义的常量。它在生产服务器(以及我以前的Ubuntu服务器设置)上运行良好 这与我的PHP安装有关吗 搜索互联网没有帮助,我得到

我刚刚用Apache、MySQL和PHP安装了Debian Lenny,我收到一个PDO异常
找不到驱动程序

这是它所指的特定代码行:

$dbh=new-PDO('mysql:host='.DB\u-host';dbname='.DB\u-NAME,DB\u-USER,DB\u-PASS)

DB\u HOST
DB\u NAME
DB\u USER
DB\u PASS
是我定义的常量。它在生产服务器(以及我以前的Ubuntu服务器设置)上运行良好

这与我的PHP安装有关吗


搜索互联网没有帮助,我得到的只是专家交流和示例,但没有解决方案。

如果MySQL和驱动程序安装正确,您是否检查了php.ini(使用phpinfo()检查正确的位置?

您需要一个名为pdo_MySQL的模块。正在phpinfo()中查找以下内容

更新:较新版本应使用
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服务器上),您只需要运行上面的行,然后就可以开始了。

代码中的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安装PHP7.0-mysql
最后,要使其工作,您需要重新启动web服务器:

  • Apache:
    sudo/etc/init.d/apache2重启
  • Nginx:
    sudo/etc/init.d/Nginx重启

在我的情况下,我的DSN字符串不正确,特别是它不包含
mysql://。
我本来希望看到不同的错误消息,可能类似于“DSN字符串未指定驱动程序/协议”


mysql://
添加到DSN字符串的开头解决了问题。

检查php配置文件中的扩展名\u dir设置是否正确。尝试注释/取消注释一些扩展,看看它是否反映在phpinfo()上。
如果没有,则无法加载php配置文件(错误位置)扩展名\u dir被注释或设置为错误位置

我在Debian 6上解决了这个问题。 通常我只是安装了
php5通用
软件包。安装后,您必须重新启动web服务器(apache或nginx,具体取决于您安装的服务器)。 然后我对apache进程id(
lsof-p进程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
如上所述,模块安装在一个文件路径上,该路径未知或不受公共库路径的引导:/
usr/lib/php5/20090626/
。对于您的安装,可能会有所不同,但只有pdo_mysql.so、pdo.so、mysqli.so的路径。因此,这就是为什么Drupal或任何其他php引擎找不到该库,并显示错误:
PDOException:not find driver

我只是不知道为什么它被安装在如此奇怪的路径上,对我来说,它只是Debian6中库包安装脚本中的一个bug。 我通过为
/usr/lib/php5/20090626/
下的所有文件创建一个符号来解决这个问题
/usr/lib/php5/
使用此命令:


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

在Ubuntu上执行

sudo apt-get install php5-mysql
$DB_TYPE='mysql'//数据库类型
$DB_HOST='localhost'//主机名
$DB_USER='root'//主机用户名
$DB_PASS=''//主机密码
$DB_NAME='database_NAME'//数据库名称

$dbh=new-PDO($DB\u-TYPE:host=$DB\u-host;dbname=$DB\u-NAME;“,$DB\u-USER,$DB\u-PASS);//PDO连接

这对我很有用。

在我的Windows机器上,我必须在php.ini中给出扩展目录的绝对路径:


extension\u dir=“c:\php5\ext”
对于
CentOS上的
php5.5
,我通过安装
php55 mysqlnd
包修复了这个问题

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

要获得安装帮助,请编写注释,因为这取决于系统上安装PHP的方式。可用的repo是
webstatic
remi

当将它们添加到php.ini中时,请确保php_pdo.dll引用在db drivers dll之前,否则也会导致此错误消息。按如下方式添加它们:

[PHP_PDO]
extension=php_pdo.dll
[PHP_PDO_MYSQL]
extension=php_pdo_mysql.dll
cd /www/homestead/my_project
php artisan migrate

问题是缺少php到mysql库。在CentOs,我通过运行来修复它
#yum安装php-mysql
,然后使用
#/bin/systemctl restart-httpd.service重新启动apache
注意,命名与基于debian/ubuntu的发行版、php->php5和httpd->apache2稍有不同。

在删除php5包(包括所有驱动程序)后,我遇到了同样的问题为了安装php7软件包。实际上,我安装的php7包没有mysql模块

我通过在终端中键入以下内容来解决此问题:

1) $apt缓存搜索php7 列出了所有的模块,查看我找到的模块

php7.0-mysql-用于PHP的mysql模块

2) $sudo apt get安装php7.0-mysql

apt-get install php-mysql
apt-get install php7.0-mysql
就这样。它在我的linux系统中对我有效

(使用适当的php版本,您的可能是php5)


在ubuntu和PHP7上运行良好,还有一件事需要确认,因为有些人正在从互联网上复制/粘贴示例代码以开始使用。确保您已在此处输入MySQL:

... $dbh = new PDO ("mysql: ...  
在一些例子中,这表明

$dbh = new PDO ("dblib ...

在使用单独的php.ini运行测试时,我遇到了同样的问题。我必须将这些行添加到我自己的php.ini文件中:

[PHP]
extension = mysqlnd.so
extension = pdo.so
extension = pdo_mysql.so
注意:正是在这里
[PHP]
extension = mysqlnd.so
extension = pdo.so
extension = pdo_mysql.so
sudo apt-get install php-mysql
sudo service apache2 restart
sudo apt-get install php5-mysqlnd
php -v
sudo apt-get install php7.0-mysql
doctrine:
  dbal:
    mapping_types:
        set: string
doctrine:
dbal:
    #To counter the error caused by 'mapping_types'
    connections:
        default:
            server_version: %database_server_version%
            mapping_types:
                set: string
apt-get install php-mysql
apt-get install php7.0-mysql
uncomment the line : extension=php_pdo_mysql.dll
service apache2 restart
OS = Windows 10  
Platform = XAMPP  
PHP Version = 7 (Multiple Version seem to have been installed in the PC)  
php artisan migrate:install   
c:\xampp\php\php artisan migrate:install
cd /www/homestead/my_project
php artisan migrate
cd ~/homestead
vagrant ssh   
cd /www/homestead/my_project
php artisan migrate
PHP Fatal error:  Uncaught PDOException: could not find driver
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 '{}' \;