PHP / Apache:PHP致命错误:调用未定义的函数mysql_connect()

时间:2013-03-11 19:10:36

标签: php mysql apache

我在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模块。

我也试过取消评论" extension = mysql.so"在php.ini中,然后PHP抱怨" PHP启动:无法加载动态库'/usr/lib64/php/modules/mysql.so'."(即使模块确实驻留在那里)。但是,我并不完全确定该行是否需要取消注释。 [更正:声明的错误实际上是由于输入错误,但是从命令行运行表明该模块已经加载了 - PHP发出了警告,说明了这一点。]

我也禁用了SELinux;多次停止/重启Apache; yummed MySQL-Devel,以防它有任何区别;似乎还有其他可能的事情。

如果我从命令行运行一个小的PHP测试脚本,访问MySQL数据库,那么它没有问题,所以PHP确实知道MySQL,但是当它在Apache下运行时似乎没有线索MySQL甚至存在。

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

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

非常感谢您的任何帮助!

7 个答案:

答案 0 :(得分:63)

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

sudo apt-get install php5-mysql

安装客户端后,应重新启动Web服务器。如果您使用的是apache,则以下内容应该有效:

sudo service apache2 restart

答案 1 :(得分:17)

请记住,自PHP 5.5.0起,mysql_connect()函数已弃用,并且已在PHP 7中完全删除

可以在php documentation上找到更多信息:

引用:

  

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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

Apache模块PHP版本可能出于某种奇怪的原因而没有把php.ini文件当作CLI版本我建议好好看看:

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

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

答案 4 :(得分:0)

Bout如何

sudo yum install php-mysql

sudo apt-get install php5-mysql

答案 5 :(得分:-3)

我收到了类似的错误消息。想想我无意中输入了" 9o"在php.ini文件的第一行开头。一旦我删除了它,我就不再收到"致命错误"消息。希望这会有所帮助。

答案 6 :(得分:-4)

mysql deamon应该正在运行。

如果没有试试这个:

#/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 (如果输入错误则忽略它......)