PHP / Apache:PHP致命错误:调用未定义函数mysql_connect()[重复]

Posted

技术标签:

【中文标题】PHP / Apache:PHP致命错误:调用未定义函数mysql_connect()[重复]【英文标题】:PHP/Apache: PHP Fatal error: Call to undefined function mysql_connect() [duplicate] 【发布时间】:2013-02-27 02:28:13 【问题描述】:

我有 mysql (5.5.23 Community Server)、Apache (2.2) 和 php (5.3.13) 在 Fedora 15 机器(64 位)上运行。每个都可以独立运行。

我认为 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 下工作,尽管理想情况下我' d 只是更喜欢让现有的安装工作。

【问题讨论】:

您确定这是您需要的模块吗? msql.so?尝试加载 pdo 模块怎么样? 您可能需要修改两个 php.ini 文件。 /etc/php5/apache2/php.ini 和 /etc/php5/cli/php.ini. 也尝试加载 pdo,但得到相同的“无法加载动态库”错误。 不,系统上只有一个 php.ini 文件。我进行了系统范围的搜索。 投票重新打开,因为此问题的答案比重复问题的答案质量更高。 【参考方案1】:

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

sudo apt-get install php5-mysql

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

sudo service apache2 restart

【讨论】:

在那之后你可能需要做sudo service apache2 restart RHEL/CEntOS 机器上的相同问题可以使用命令yum install php-mysqli 修复 @taco 提到在其他系统上你可以使用 sudo apt-get install php-mysql【参考方案2】:

请记住,从 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()

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

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

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

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

【讨论】:

我会戴上我的夏洛克帽子,看看可能有什么不同,然后再回到这里,但是,至于权限,我的想法和你一样:Apache 会解析无论如何作为根。这些模块都有根所有者/组,并且都设置为 755。 它不会阻止它工作,但模块不需要设置 exec 位,所以 644 就可以了。 好的,很高兴知道。好吧,尝试比较输出时我已经有点困惑了。使用 php -i 和 phpinfo(),配置文件以 /etc/php.ini 的形式给出,这是我一直在使用的,也是我唯一知道的。但是,使用 php -i,编译信息'显示它是用 mysql 和其他相关模块(例如 pdo 等)编译的,但 phpinfo() 显示它编译时没有 (... '--without-mysql' '-- without-gd' '--disable-dom' '--disable-dba' '--without-unixODBC' '--disable-pdo' ...等);仅供参考,服务器上只有一个 MySQL 和 Apache 实例。 任何人都明白了吗? 在 php.ini 文件中你可以尝试在绝对路径中包含 mysql.so 扩展名【参考方案5】:

怎么样

sudo yum install php-mysql

sudo apt-get install php5-mysql

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

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

【讨论】:

是的,已经尝试过了。重新启动 MySQL 和 Apache,以防万一。不过还是谢谢。 重启 mysql 服务器不会改变客户端库的运行情况 这是一个糟糕的方法。将精力集中在可能产生影响的地方! 是的,pixeltracer,一个错字。 好吧,已经尝试了我能想到的一切,我没有想法......如果重新启动 MySQL 可能会产生影响,那么对我来说,这是值得尝试的。

以上是关于PHP / Apache:PHP致命错误:调用未定义函数mysql_connect()[重复]的主要内容,如果未能解决你的问题,请参考以下文章

致命错误:在第 177 行调用 C:\apache\htdocs\phpmyadmin\libraries\php-gettext\gettext.inc 中的未定义函数 mb_detect_enco

致命错误:调用未定义函数 mysql_connect()

php工匠不起作用

雪豹:致命错误:调用未定义函数 mysql_connect()

如何解决这个错误?致命错误:在第X行的... / magento18 / lib / Zend / Uri.php中调用未定义的函数ctype_alnum()?

致命错误:在 Windows 中调用未定义的函数 mb_detect_encoding()