我刚刚安装了Debian Lenny与Apache, MySQL和PHP,我收到一个PDOException无法找到驱动程序。

这是它所引用的特定代码行:

$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安装有关吗?

在网上搜索也没有帮助,我得到的都是专家交流和例子,但没有解决方案。


当前回答

问题是一个丢失的php到mysql库。在CentOs中,我通过运行来修复它 # yum install php-mysql,然后用# /bin/systemctl restart httpd重启apache。注意,命名与基于debian/ubuntu的发行版,php->php5和httpd->apache2略有不同。

其他回答

代码中的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 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服务器上),你只需要运行上面的行,然后你就可以开始了。

无论我走到哪里,我都读到extension_dir的路径应该从ext更改为绝对路径。这对我很管用。然而,当我试图构建我同事PC的服务器时,我不得不让值到ext而不是放置一个绝对路径。

如果您确实放置了一个绝对路径,但仍然没有找到扩展名,请考虑同时尝试使用绝对路径和ext。

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

我在终端中输入:

1) $ apt-cache搜索php7 上面列出了我找到的所有模块,

PHP的MySQL模块

2)安装php7.0-mysql

就是这样。它适用于我的linux系统。

(使用合适的PHP版本,你的可以是php5)

检查模块是否可用php -m | grep pdo_mysql。

如果没有,对于PHP 7.2,可以使用sudo apt install php7.2-mysql安装相关包。

在其他PHP版本和包管理器上使用类似的命令。