【问题标题】:PHP 7 RC3: How to install missing MySQL PDOPHP 7 RC3:如何安装缺少的 MySQL PDO
【发布时间】:2015-12-20 03:19:54
【问题描述】:

我正在尝试在Ubuntu 14.04 上使用PHP 7 RC3 + Nginx 设置网络服务器(用于测试目的)。

我使用来自 Ondřej Surý (https://launchpad.net/~ondrej/+archive/ubuntu/php-7.0) 的 ubuntu/trusty64 和 PHP 7 RC 3 在 Vagrant 中安装了 Ubuntu。

我找不到安装MySQL PDO 的方法(PHP 看到PDO 类但没有任何与MySQL 相关的东西,例如PDO::MYSQL_ATTR_DIRECT_QUERY 等)

看起来没有库 php7.0-mysql(类似于来自 Ondřej 的标准 php5-mysqlndphp7.0-fpm 等)

phpinfo() 中的PDO 部分:

PDO support      enabled
PDO drivers      no value

我怎样才能得到它?

【问题讨论】:

  • 您说的是 Ubuntu 12.04,但后来您使用的是 ubuntu/trusty64,即 14.04。假设您实际上使用的是 Trusty(毕竟 Ondřej 还没有为 Precise 制作软件包),那么他的 php-modules 软件包将提供 php-mysql
  • 是的,你完全正确! (版本是固定的)。您对模块名称的建议有效。谢谢!如果您将其添加为答案,我会将其标记为正确。
  • 我的错误 - 我是这样搜索的 apt-cache search php pdo 和模块 php-mysql 在这种情况下没有显示。
  • 如果它类似于标准的 Ubuntu/Debian,您也可以安装 php5-mysqlnd 以使用 mysql native driver,根据该链接,“强烈鼓励”,即使 Ubuntu 开发人员不使用默认情况下。
  • 迈克,php5-mysqlnd 对我不起作用,因为我安装了PHP 7

标签: php mysql ubuntu pdo php-7


【解决方案1】:

对于那些使用 apache2 运行 Linux 的用户,您需要安装 php-mysql

apt-get install php-mysql

或者如果您运行的是 ubuntu 16.04 或更高版本,只需运行以下命令即可,无需编辑 php.ini 文件

apt-get install php7.2-mysql

如果您运行的是 ubuntu 15.10 或更低版本:

编辑您的 php.ini 文件,它位于 /etc/php/[version]/apache2/php.ini 并搜索 pdo_mysql 你可能会发现类似的东西

;extension=pdo_mysql.so

改成这个

extension=pdo_mysql.so

保存文件并重启apache

service apache2 restart

检查它是否在您的 phpinfo()

中可用

【讨论】:

  • 仅供参考,我强烈建议使用MySQLND(php-mysqlnd) 而不是旧的php-mysql
  • 不是每个人都可以选择客户应用程序已经使用的库,也不是每个人都可以“apt-get”
  • 注意:“service restart apache2”应改为“service apache2 restart”。对于 Ubuntu 16.04,我只使用了“sudo apt-get install php7.0-mysql”和“sudo service apache2 restart”。
  • 我不得不再次安装 php-mysql。似乎在该存储库中进行了一些更新。
  • apt-get install php7.2-mysql 与 PHP 7.2 配合使用。
【解决方案2】:

先安装php-mysql

sudo apt-get install php7.0-mysql
//change the version number based on the php version

然后启用模块

sudo phpenmod pdo_mysql

然后重启apache

sudo service apache2 restart 

【讨论】:

  • 个人 +1 用于提供在 php 中启用库的命令。
【解决方案3】:

在 ubuntu 18.04 以下对我有用

在你的终端输入这个

对于php7.3

sudo apt-get install php7.3-gd php7.3-mysql

对于php7.0

sudo apt-get install php7.0-gd php7.0-mysql

对于 php5

sudo apt-get install php5-gd php5-mysql

【讨论】:

  • 对于 Ubuntu 20 和 apache 2.4.x,我不需要 -gd。 sudo apt-get install php7.4-mysql
【解决方案4】:

首先,检查你的 php.ini 是否启用了扩展“php_pdo_mysql”和“php_mysqli”以及“extension_dir”的路径是否正确。如果您需要上述配置之一,则必须重新启动 php-fpm 以应用更改。

就我而言(我在公司使用 Windows 操作系统,我真的更喜欢 OSX 或 Linux),我解决了将此值放入 php.ini 的问题:

; ...

extension_dir = "ext"

; ... 

extension=php_mysqli.dll
extension=php_pdo_mysql.dll

; ...

我希望这会有所帮助。

【讨论】:

  • 这只有在系统上确实存在这些文件时才有用。
【解决方案5】:

由于eggyal 在评论中给出正确建议后没有提供他的评论作为答案 - 我将其发布在这里:在我的情况下,我必须安装模块 php-mysql。有关详细信息,请参阅问题下的 cmets。

【讨论】:

    【解决方案6】:

    如果你在windows上,并且你的php文件夹不在你的PATH中,你已经在你的php.ini中设置了绝对目录

    例如:

    extension_dir = "C:/php7/ext"
    

    并取消注释

    extension=php_mysqli.dll
    extension=php_pdo_mysql.dll
    

    重新启动apache2.4,它应该可以工作了。

    希望对你有帮助。

    【讨论】:

      【解决方案7】:
      1. 下载php 7的源码并解压。
      2. 打开你的终端
      3. 游到ext/mysqli目录
      4. 使用命令:

        php化

        ./配置

        制作

        进行安装(以 root 身份)

      5. 在您的 php.ini 文件中启用 extension=mysqli.so
      6. 完成!

      这对我有用

      【讨论】:

      • 谢谢,同样适用于 pdo_mysql。不知道为什么它没有被编译为默认 make 的一部分;make install o_O
      【解决方案8】:

      我几乎也有同样的问题。我能够看到 PDO 已启用,但我没有可用的驱动程序(使用 PHP 7-RC4)。我设法通过将 php_pdo_mysql 扩展添加到已启用的扩展来解决问题。

      希望这会有所帮助!

      【讨论】:

        【解决方案9】:

        我通过重新安装 php-mysql 解决了我在 ubunto 20.4 上的问题。

        删除php-mysql:

        sudo apt purge php7.2-mysql
        

        然后安装php-mysql:

        sudo apt install php7.2-mysql
        

        它将在 php.ini 中添加新的配置

        【讨论】:

          【解决方案10】:

          有同样的问题,通过使用正确的文件名在 php.ini 中启用扩展名来解决。它被列为 php_pdo_mysql.so 但 /lib/php/modules 中的模块名称被称为 pdo_mysql.so

          所以只需从 php.ini 文件中删除“php_”前缀,然后重新启动 httpd 服务,它就可以正常工作了。

          请注意,我使用的是 Arch,因此路径名称和服务可能因您的分布而异。

          【讨论】:

            【解决方案11】:

            我将从答案开始,然后是上下文注意此修复已在上面记录,我只是为任何使用谷歌搜索的人重新说明它。

            1. 下载php 7的源码并解压。
            2. 打开你的终端
            3. 游到 ext/pdo_mysql 目录
            4. 使用命令:

              php化

              ./配置

              制作

              进行安装(以 root 身份)

            5. 在您的 php.ini 文件中启用 extension=mysqli.so

            这是从这里记录的答案(如果它对您也有帮助,请点赞):https://stackoverflow.com/a/39277373/3912517

            上下文: 我正在尝试将 LimeSurvey 添加到标准的 WordPress Docker 中。阻碍我的单点是“PHP PDO 驱动程序库”,即“未找到”

            php -i | grep PDO                                                                                  
            PHP Warning:  PHP Startup: Unable to load dynamic library 'pdo_odbc' (tried: /usr/local/lib/php/extensions/no-debug-non-zts-20170718/pdo_odbc (/usr/local/lib/php/extensions/no-debug-non-zts-20170718/pdo_odbc: cannot open shared object file: No such file or directory), /usr/local/lib/php/extensions/no-debug-non-zts-20170718/pdo_odbc.so (/usr/local/lib/php/extensions/no-debug-non-zts-20170718/pdo_odbc.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
            PHP Warning:  Module 'mysqli' already loaded in Unknown on line 0
            PDO
            PDO support => enabled
            PDO drivers => sqlite
            PDO Driver for SQLite 3.x => enabled
            

            Ubuntu 16 (Ubuntu 7.3.0)

            apt-get install php7.0-mysql
            

            结果:

            Package 'php7.0-mysql' has no installation candidate
            

            获取说明说我所要做的就是运行这个:

            add-apt-repository -y ppa:ondrej/apache2
            

            但后来我明白了:

            UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 223: ordinal not in range(128)
            

            所以我尝试强制使用某种类型的 UTF: LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/apache2 我明白了: 未找到有效的 OpenPGP 数据。

            按照其他一些说明运行它: apt-get 更新 我明白了: 错误:14 http://ppa.launchpad.net/ondrej/apache2/ubuntu cosmic/main amd64 包 404 未找到 错误:15 http://ppa.launchpad.net/ondrej/php/ubuntu cosmic/main amd64 包 404 未找到 并且 - 我认为正因为如此 - 我得到:

            The repository 'http://ppa.launchpad.net/ondrej/apache2/ubuntu cosmic Release' does not have a Release file.
            

            到这个阶段,我仍然在 apt-get update 上得到这个:

            Package 'php7.0-mysql' has no installation candidate.
            

            我开始尝试添加 php 库,遇到了 Unicode 问题,试图解决这个问题,然后......你明白了...... whack-a-mole。我放弃了,看看我是否可以编译它,我找到了我开始的答案。

            你可能想知道为什么我写了这么多?这样任何人都可以通过谷歌搜索找到这个解决方案(包括我!)。

            【讨论】:

            • 我需要回到这里重复这一点,然后不得不搜索如何找到 php.ini,因为我的 docker install 位于不同的位置:php --ini
            【解决方案12】:
            ['class' => 'yii\db\Connection',
                'dsn' => 'mysql:host=localhost:3306;dbname=testdb',
                'username' => 'user',
                'password' => 'password',
                'charset' => 'utf8',]
            

            很简单: 只需提供端口号和主机名 并将默认 sock 路径设置为运行服务器的 php.ini 中的 mysql.sock 文件路径。

            【讨论】:

              猜你喜欢
              • 2016-12-14
              • 2014-10-18
              • 1970-01-01
              • 1970-01-01
              • 2012-10-13
              • 2019-02-04
              • 2013-07-15
              相关资源
              最近更新 更多