如何解决此问题:您的PHP安装似乎缺少MySQL扩展

piv4azn7  于 2023-01-08  发布在  PHP
关注(0)|答案(6)|浏览(461)

环境:os和apache和php和mariadb版本。

uname -a
Linux MiWiFi-R3-srv 4.9.0-11-amd64 #1 SMP Debian 4.9.189-3+deb9u2 (2019-11-11) x86_64 GNU/Linux

sudo apachectl -v
Server version: Apache/2.4.25 (Debian)
Server built:   2019-10-13T15:43:54

php -v
PHP 7.0.33-0+deb9u6 (cli) (built: Oct 24 2019 18:50:20) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.0.33-0+deb9u6, Copyright (c) 1999-2017, by Zend Technologies

使用密码登录mariadb并输入status

Server:         MariaDB
Server version:     10.1.41-MariaDB-0+deb9u1 Debian 9.9

检查php-mysql:

sudo dpkg -l php-mysql
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version      Architecture Description
+++-==============-============-============-=================================
ii  php-mysql      1:7.0+49     all          MySQL module for PHP [default]

获取mysql.so库:

sudo find  /  -name  "*mysql.so"
/usr/lib/php/20151012/pdo_mysql.so

检查包含mysql的所有模块:

php -m |grep  mysql
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/20151012/php_pdo_mysql.so' - /usr/lib/php/20151012/php_pdo_mysql.so: cannot open shared object file: No such file or directory in Unknown on line 0
mysqli
mysqlnd
pdo_mysql

sudo vim  /etc/php/7.0/fpm/php.ini

重写

; ... or under UNIX:
;
;extension=mysql.so

作为

extension=mysqli.so

extension=mysqlnd.so

extension=pdo_mysql.so

重新启动apache 2和mariadb数据库,问题仍然存在,三种格式都无法工作,如何修复?

w80xi6nr

w80xi6nr1#

pdo_mysqlmysql.so不同。旧的mysql扩展在PHP 7.0中被删除。现在支持的扩展名只有mysqli
从那时起,它取决于软件期望找到什么-如果它需要旧的mysql库,那么您将不得不使用shim或旧的PHP版本(即PHP 7之前的任何版本,如PHP 5.6)。
您可以使用can use the php7-mysql-shim librarythe mysql-shim library(注意,这可能会导致性能损失)来提供一个透明Map,该Map将对旧mysql库的任何调用分派到仍然受支持的mysqli库。只要您通过composer安装了php7-mysql-shim,并且您的项目使用composer,它应该自动加载。
第三种选择是通过mysql-to-mysqli rector配置运行原始代码,但是如果这不是您自己的代码,那么将来将很难维护。
无法加载的.so文件可能是由于权限问题。请确保对该文件执行ls -al操作并更正所有权或权限问题(可能是chmod og+r <filename>)。

n53p2ov0

n53p2ov02#

删除php和相关的软件包。

sudo apt-get autoremove php7*
sudo find /etc -name "*php*" |xargs  rm -rf 
sudo apt purge `dpkg -l | grep php| awk '{print $2}' |tr "\n" " "`

检查完毕。

dpkg -l | grep php7.0

安装。

sudo apt-get install php php-mysql

我的问题终于解决了。

vdzxcuhz

vdzxcuhz3#

MatsLindh是对的,mysql从php7开始就被弃用了,看起来你在服务器上部署了旧的php5代码,这就是你收到这个错误的原因,现在你可以做两件事

  • 安装php5.6并根据你的主机选择网站文件夹的版本并重新启动服务器
  • 或者你可以升级代码到php 7+要么自己或使用工具,我不知道它是否工作完美,最近我遇到了这个Rector Tool for upgrading php legacy code

我们在前几个月也是这样做的,我们把mysql代码更新为mysqli,还更新了类声明,添加了必要的检查,修复了错误处理,我们能够在php 7上成功运行遗留应用程序。有时候由于复杂的开发,不可能立即升级,也不可能从头开始,这是因为多年来引入的业务逻辑,因此更改可能只有被介绍与婴儿的步骤,我可以这样说,因为我们处理我们的高流量电子商务网站。

gijlo24d

gijlo24d4#

正如其他人所说,虽然没有源代码,但mysql扩展(ext/mysql)是deprecated in 5.5(每个RFC: ext/mysql deprecation)和removed in 7.0(每个RFC: Remove deprecated functionality in PHP 7)。
This is the git commit实际上从PHP中删除了ext/mysql,从删除RFC中链接到-此链接由RFC作者nikic(https://wiki.php.net/rfc/remove_deprecated_functionality_in_php7?do=revisions)添加)
www.example.com上的ext/mysql manual也提到了这php.net,尽管它没有链接到任何其他关于弃用和后续删除的注解。
如果你查看backwards-incompatible changes page for 7.0,它会进一步提到所有的mysql扩展函数都被删除了,provides a link帮助选择一个新的API。这为从ext/mysql继续前进提供了必要的支持和路径。

uqxowvwt

uqxowvwt5#

避免使用***快速修复***,这将使您的应用程序支持旧的php-mysql驱动程序。从php中删除它是有原因的。
您可以使用php-mysql的后续版本MySQLi驱动程序,名称MySQLi实际上是MySQL-improved的意思,正如您所理解的,它是MySQL驱动程序的改进版本,为开发人员提供了更多好处。
您还可以使用PHP Data Objects(PDO),这是一个扩展,它定义了一个轻量级的、一致的接口来访问PHP中的数据库(MySQL 就是其中之一)。
这意味着你必须重写与数据库处理信息相关的代码。如果你为它写了一个类,那么你只需要重写那个类。如果所有与MySQL相关的函数都写在你的应用程序中,那么你有很多工作要做。

不要使用旧的MySQL扩展或通过快速修复指出这一点的东西

自己做一些进一步的阅读,以判断什么是这种情况下的最佳实践,MySQLi WikiIntroduction to PDOMySQLi Overview

kzipqqlq

kzipqqlq6#

您需要检查的第一件事是PHP版本与现有CMS版本的兼容性。
在大多数情况下,错误只由于这一点。
如果您使用的是域托管,并且在其中有一个不同的站点,您也可以仅通过此Htaccess文件在一个子域中切换PHP版本。
就像这样- fcgidWrapper“/home/httpd/cgi-bin/php53-fcgi启动器.fcgi”.php
谢谢你!

相关问题