又一个 PDO 无法找到驱动程序问题

又一个 PDO 无法找到驱动程序问题

过去两个晚上我一直在努力在 Amazon ec2 上设置自己的 LEMP 服务器。我不是服务器专家,所以进展很慢,而且在尝试创建新的 PDO 对象时,出现了最新的错误“找不到驱动程序”。

我读过几十条关于此错误的帖子,但不幸的是,没有一个修复方法对我有用。大多数情况下,他们都说我必须安装 php-mysql - 但当然这是不可能的:

$ sudo yum install php-mysql
Last metadata expiration check: 0:22:54 ago on Sat 17 Aug 2019 02:26:41 AM UTC.
No match for argument: php-mysql
Error: Unable to find a match

同时,phpinfo() 似乎报告驱动程序安裝了??

MySQL driver for PDO    George Schlossnagle, Wez Furlong, Ilia Alshanetsky, Johannes Schlueter

在 phpinfo() 的 PDO 部分下,它显示:

PDO drivers     odbc, sqlite

所以我认为 mysql 驱动程序确实丢失了?我又回到了原点 - 找到它并安装它...但是如何找到适合我的设置的驱动程序呢?我尝试使用 yum 进行搜索,但失败了(大惊喜):

$ yum search php-
Red Hat Update Infrastructure 3 Client Configuration Server 8                                                                   0.0  B/s |   0  B     00:00
Error: Failed to synchronize cache for repo 'rhui-client-config-server-8'

在 Google 上搜索该错误让我迷失了另外一百多个线程,但都无济于事。

有人能给我指出正确的方向吗?我想我需要运行一个特定于我的设置的简单命令,我只需要弄清楚它是什么。

我还尝试过其他一些方法:

  • 从 Linux 命令提示符运行 php 脚本来验证问题是否存在:确实如此
  • 检查 php.ini 设置(它们看起来不错,我会将它们粘贴在下面)
  • 检查 /etc/php-fpm.d/www.conf 设置(这些看起来也不错,将粘贴在下面)

这是我的各种操作系统的详细信息:

$ cat /etc/os-release
NAME="Red Hat Enterprise Linux"
VERSION="8.0 (Ootpa)"
ID="rhel"
ID_LIKE="fedora"
VERSION_ID="8.0"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Red Hat Enterprise Linux 8.0 (Ootpa)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:redhat:enterprise_linux:8.0:GA"
HOME_URL="https://www.redhat.com/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"
REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 8"
REDHAT_BUGZILLA_PRODUCT_VERSION=8.0
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="8.0"

$ php -v
PHP 7.2.11 (cli) (built: Oct  9 2018 15:09:36) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

$ nginx -v
nginx version: nginx/1.14.1

$ mysql --version
mysql  Ver 8.0.17 for Linux on x86_64 (Source distribution)

以及 php.ini 的一些摘录:

[Pdo]
; Whether to pool ODBC connections. Can be one of "strict", "relaxed" or "off"
; http://php.net/pdo-odbc.connection-pooling
;pdo_odbc.connection_pooling=strict

;pdo_odbc.db2_instance_name

[Pdo_mysql]
; If mysqlnd is used: Number of cache slots for the internal result set cache
; http://php.net/pdo_mysql.cache_size
pdo_mysql.cache_size = 2000

; Default socket name for local MySQL connects.  If empty, uses the built-in
; MySQL defaults.
; http://php.net/pdo_mysql.default-socket
pdo_mysql.default_socket=

摘自/etc/php-fpm.d/www.conf:

user = nginx
group = nginx

希望这些信息足够了——提前感谢您的帮助!

答案1

PHP PDO MySQL 驱动程序位于名为 的包中php-mysqlnd。安装此包,然后重新启动php-fpm服务。

[root@rhel8 ~]# dnf info php-mysqlnd
Updating Subscription Management repositories.
Last metadata expiration check: 0:08:40 ago on Sat 17 Aug 2019 01:48:02 AM EDT.
Installed Packages
Name         : php-mysqlnd
Version      : 7.2.11
Release      : 1.module+el8+2561+1aca3413
Arch         : x86_64
Size         : 451 k
Source       : php-7.2.11-1.module+el8+2561+1aca3413.src.rpm
Repo         : @System
From repo    : rhel-8-for-x86_64-appstream-rpms
Summary      : A module for PHP applications that use MySQL databases
URL          : http://www.php.net/
License      : PHP
Description  : The php-mysqlnd package contains a dynamic shared object that
             : will add MySQL database support to PHP. MySQL is an
             : object-relational database management system. PHP is an
             : HTML-embeddable scripting language. If you need MySQL support for
             : PHP applications, you will need to install this package and the
             : php package.
             : 
             : This package use the MySQL Native Driver

[root@rhel8 ~]# 

相关内容