未定义函数mysql_connect()。

108

我已经运行了aptitude install php5-mysql(并重新启动了MySQL / Apache 2),但仍然收到以下错误:

致命错误:在/home/validate.php的第21行调用未定义的函数mysql_connect()

phpinfo()显示已解析/etc/php5/apache2/conf.d/pdo_mysql.ini文件。


其他 PHP/MySql 内置函数怎么样?它们能用吗? - samayo
也许不是这样的,因为我尝试输入错误的用户名/密码,但我的“or die”语句没有显示! - user1765369
14个回答

109

如果您正在使用PHP7,那么以前被弃用的函数mysql_*已经完全被删除,因此您应该更新代码使用PDO函数或mysqli_*函数。

如果不可能更新代码,可以采用 解决方法,我创建了一个小的PHP包含文件,使用mysqli_*()函数重新创建旧的mysql_*函数: fix_mysql.inc.php


3
对于我的情况来说,这是一个完美的解决方案,我不能只是升级而破坏所有现有的代码。然而,在您的文件中全局变量$con是一个问题,因为被包含的文件无法读取其父类构造函数中的全局变量。不过,我在需要的被包含文件的函数内部简单地创建了一个连接变量。现在我的代码正常工作了。谢谢。 - zeeshan
6
谢谢.. 它拯救了我的生命,因为生产环境升级到php7,而php5应用程序崩溃了。 - geekonweb
这是我今天在godaddy移动我的服务器时遇到的问题。尽管在cpanel中选择了php 5.6(而不是7.0+)并启用了mysql和mysqli选项,但'mysql_connect'仍未定义。虽然仍需花费2个小时进行诊断和修复,但您的脚本让我免于浪费8-10个小时!谢谢。 - Juraj

62

我看到您标记了Ubuntu。很可能MySQL驱动程序(以及可能的MySQL)未安装。假设您具有SSH或终端访问权限和sudo权限,请登录服务器并运行以下命令:

sudo apt-get install mysql-server mysql-client php5-mysql

如果MySQL包或php5-mysql包已经安装,这将更新它们。

更新

由于这个答案仍然会偶尔被点击,我将更新它以包括PHP 7。 PHP 7需要一个不同的MySQL软件包,因此您将需要使用apt-get命令的不同参数。

# Replace 7.4 with your version of PHP
sudo apt-get install mysql-server mysql-common php7.4 php7.4-mysql

重要的是,自PHP v5.5.0起,mysql_connect()已被弃用。请参考官方文档:PHP:mysql_connect()


我收到了“无法找到软件包php7.0”的错误信息。 - strangetimes
将7.0替换为7.3。 - rubo77
对我来说,它是:sudo apt-get install php7.4-mysql && sudo service apache2 restart。 - Laurent Debricon

60

好的,这是你的机会!看起来 PDO 已经准备就绪了,使用它吧。

尝试检查一下是否正在加载 PHP MySQL 扩展模块:

<?php
    phpinfo();
?>

如果没有该项设置,将以下内容添加到 php.ini 文件中:

extension=php_mysql.dll

这是连接数据库的更好方式吗?我会研究一下,但我真的很想先让它工作起来,因为在我移动到新服务器之前,它曾经有效。 - user1765369
2
这是真的。mysql_*函数在PHP 4.1版本之后已经被弃用且存在安全隐患。请检查您的Apache错误日志并重新启动服务器。这样行吗? - wanovak
我正在使用xampp,在将那行代码添加到php.ini后,我在apache error.log中收到以下消息“无法加载动态库'\xampp\php\ext\php_mysql.dll。” - 0x777
1
@defmx 那个路径下的 .dll 文件存在吗?如果不存在,您需要安装它。 - wanovak
哇,我绝对想不到这个。这一行在我的php.ini文件中存在,但被注释掉了。安装php_mysql的程序难道不应该为你取消注释这一行吗? - undefined

59
如果有人遇到关于docker php官方镜像的问题,请在docker容器内输入以下命令。
$ docker-php-ext-install mysql mysqli pdo pdo_mysql

请参考上面链接中的如何安装更多PHP扩展一节获取更多信息(但对我来说有点困难...)。

或者这个文档可能会帮到您。

https://docs.docker.com/samples/library/php/


4
"mysql" 是我想要的。 - deFreitas

20

我也遇到了同样的undefined MySQL_connect()问题。我尝试在PHP.ini文件中进行更改,但它仍然给我同样的错误。 然后,我采用了这种解决方案,将我的代码从弃用的php函数更改为新函数。

$con=mysqli_connect($host,$user,$password);

mysqli_select_db($con,dbname); 
//To select the database

session_start(); //To start the session

$query=mysqli_query($con,your query); 
//made query after establishing connection with database.

我希望这能帮助到你。 这个解决方案对我来说是有效的。

编辑:

如果你从旧版本的php升级,你需要安装apt-get install php7.0-mysql


9

尝试:

<?php
  phpinfo();
?>

运行页面并搜索mysql。如果没有找到,请在shell中运行以下命令,并重新启动Apache服务器:

sudo apt-get install mysql-server mysql-client php5-mysql

同时确保你的apache2.conf(或conf.d/php.ini)文件中有以下所有行都被取消注释:

;extension=php_mysql.so

to

extension=php_mysql.so

8
在php.ini文件中,
将此处更改为:
;extension=php_mysql.dll

转换为

extension=php_mysql.dll

4
我猜测你的PHP安装没有MySQL支持。检查你的配置命令(php -i | grep mysql)。你应该看到类似于'--with-mysql=shared,/usr'这样的内容。你可以在http://php.net/manual/en/mysql.installation.php上查找完整的说明。尽管如此,我更倾向于采用@wanovak提出的解决方案。但是,我认为你需要MySQL支持才能使用PDO。

3
这个问题标记为 ubuntu,但是取消注释 extension=mysqli.dll 的解决方案只适用于 Windows。我感到困惑!总之,首先运行 <? php phpinfo ?> 并在 Configuration 标题下搜索 mysql*。如果找不到这样的内容,则说明您尚未安装或启用 php-mysql。因此,首先安装 php-mysql

sudo apt get install php-mysql

该命令将根据您已经安装的 php 安装 php-mysql,所以不用担心版本问题!!。

然后,针对 Unix 的特定解决方案是,在php.ini文件中取消注释该行:

extension=msql.so

请确认/usr/lib/php/<timestamp_folder>文件夹中是否存在msql.so文件,否则

extension=path/to/msql.so

最后重启 apachemysql 服务,现在您应该在 phpinfo页面的Configurations标题下看到 mysql 部分。


0

我遇到了这个错误,因为我正在开发的项目是在php 5.6上开发的,安装后,该项目无法在php7.1上运行。

对于任何使用Vagrant和ubuntu/nginx的人,在nginx目录(/etc/nginx/)中,有一个名为“sites-available”的目录,其中包含一个文件,命名为vagrant机器配置的url。在我的情况下是homestead.app。在此文件中,有一行类似于以下内容:

    fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;

在那里,您可以将 PHP 版本更改为特定站点所需的版本。

我搜索了一下,但并没有真正找到一个简单的答案,告诉我去哪里查找和更改。

希望这可以帮助任何人。 谢谢。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接