21

我在 Fedora 15 机器(64 位)上运行 MySQL(5.5.23 社区服务器)、Apache(2.2)和 PHP(5.3.13)。每个都可以自己正常工作。

我认为 PHP 已配置/编译为与 MySQL 一起使用,但是当我尝试加载任何进行 MySQL 调用的 PHP 网页时,我收到上述致命错误(在 Apache 错误日志中)。PHP 可以通过 Apache 和命令行自行运行。

当我从命令行运行 php -i 时,它确实显示了所有 MySQL 的点点滴滴,但是当我加载显示 phpinfo() 的页面时,没有提到任何 MySQL 模块。

我也尝试在 php.ini 中取消注释“extension=mysql.so”,但 PHP 然后抱怨“PHP 启动:无法加载动态库'/usr/lib64/php/modules/mysql.so'."(即使模块确实驻留在那里)。但我不是完全确定是否需要取消注释该行。[更正:所述错误实际上是由于拼写错误,但从命令行运行显示模块已经加载 - PHP 发出警告这么说。]

我还禁用了 SELinux;多次停止/重新启动 Apache;yummed MySQL-Devel,以防它有什么不同;而且,似乎所有其他可能的事情。

如果我从命令行运行一个小的 PHP 测试脚本来访问 MySQL 数据库,那么它可以正常工作,所以 PHP 确实知道 MySQL,但是当它在 Apache 下运行时,它似乎不知道 MySQL 是否存在。

几个月来我一直在尝试解决这个问题,似乎已经尝试了一切,但似乎没有任何效果。

如果我真的必须重新安装 PHP,我不介意重新安装 PHP,如果有人可以演示使用 MySQL 支持配置/编译的正确方法,以便我可以让它在 Apache 下工作,尽管理想情况下我更喜欢使现有的安装工作。

4

7 回答 7

63

万一其他人面临这种​​情况,这是 PHP 无法访问 mysql 客户端库的情况。在系统上拥有 MySQL 服务器不是正确的解决方法。修复 ubuntu(和 PHP 5):

sudo apt-get install php5-mysql

安装客户端后,应重新启动网络服务器。如果您使用的是 apache,以下应该可以工作:

sudo service apache2 restart
于 2013-09-02T16:03:26.003 回答
18

请记住,从 PHP 5.5.0 开始,该mysql_connect()函数已被弃用,并在 PHP 7 中完全删除

更多信息可以在php 文档中找到:

引用:

警告
此扩展在 PHP 5.5.0 中已被弃用,并在 PHP 7.0.0 中被删除。相反,应该使用 MySQLi 或 PDO_MySQL 扩展。另请参阅 MySQL:选择 API 指南和相关的常见问题解答以获取更多信息。此函数的替代方法包括:
* mysqli_connect()
* PDO::__construct()

于 2016-04-22T19:42:58.180 回答
3

我遇到了同样的问题,不得不参考php 手册,该手册告诉我 mysql 和 mysqli 扩展需要 libmysql.dll 才能加载。我在C:\windows\system32(windows 7)下搜索了它,找不到,所以我在这里下载它并将它放在我的C:\windows\system32中。我重新启动了 Apache,一切正常。花了我3天时间弄清楚,希望它有帮助。

于 2013-07-14T09:44:04.463 回答
-1

由于某些奇怪的原因,Apache 模块 PHP 版本可能没有将 php.ini 文件作为 CLI 版本,我建议好好看看:

  • 在网页之间和通过网页的.ini文件中的任何差异*php -iphpinfo()
  • 如果没有差异,则查看文件的权限,mysql.so.ini我认为 Apache 将这些作为root用户解析

在这里要非常清楚,不要去php.ini文件系统上搜索文件,看看 PHP 说它在看什么

于 2013-03-11T20:12:30.463 回答
-1

怎么样

sudo yum install php-mysql

或者

sudo apt-get install php5-mysql
于 2016-10-16T07:01:03.837 回答
-3

我收到了类似的错误消息。认为我在 php.ini 文件的第一行开头无意中输入了“9o”。删除它后,我不再收到“致命错误”消息。希望这可以帮助。

于 2014-03-24T10:11:30.750 回答
-4

守护mysql进程应该正在运行。

如果不试试这个:

#/etc/init.d/mysql start

或这个:

#service mysqld start

如果你想在启动时添加 mysql:

# chkconfig --add mysqld
# chkconfig -- level 235 mysqld on

如果是,但它仍然无法正常工作,试试这个:

取消注释 /etc/php/php.ini 中的以下行

extension=mysqli.so
extension=mysql.so

请检查您在'/usr/lib64/php/modules/msql.so'上方的帖子。它应该是mysql.so(如果输入错误,请忽略它......)

于 2013-03-11T19:17:27.197 回答