未定义的函数mysql_connect()


80

我已经运行aptitude install php5-mysql(并重新启动了MySQL / Apache 2),但是仍然出现此错误:

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

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


其他内置的PHP / MySql函数如何?做他们的工作?
samayo 2012年

可能不是,因为我尝试输入了错误的用户名/密码,并且我的“ or die”语句没有显示!
user1765369

Answers:


53

好吧,这是你的机会!看来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
bigpony

1
@defmx该路径下是否存在.dll文件?如果不是,则需要安装它。
wanovak

63

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

如果不可能,作为一种解决方法,我创建了一个小的PHP包含文件,该文件mysql_*使用-functions重新创建了旧函数mysqli_*()fix_mysql.inc.php


1
对于我的情况而言,这是完美的解决方案,我不能只升级并破坏所有现有代码。但是,文件中的全局$ con变量是一个问题,因为包含的文件无法读取构造函数包括在其中的父类的全局变量。但是,我只是在需要的地方在包含文件的功能内创建了一个连接变量。现在我的代码工作正常。谢谢。
zeeshan

这对于使旧代码库在更新的服务器平台上再次运行非常有帮助。干杯!
mxmader '18

4
谢谢..它挽救了我的生命,生产被升级到php7,php5应用程序崩溃了
geekonweb '19

这是一个很好的解决方法,可以节省升级旧版PHP应用程序所需的时间。非常感谢。
Joel Karunungan

谢谢@ ubo77。在旧版代码库上省去了一些麻烦。
mikoop

57

我看到您使用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命令使用不同的参数。

sudo apt-get install mysql-server mysql-common php7.0 php7.0-mysql

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


我无法找到软件包php7.0
奇怪的时间

用7.3替换7.0
rubo77


16

我也遇到了未定义的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



5

尝试:

<?php
  phpinfo();
?>

运行页面并搜索mysql。如果未找到,请在外壳程序中运行以下命令,然后重新启动Apache服务器:

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

此外,请确保您在apache2.conf(或conf.d / php.ini)文件中的某处未注释以下所有行,从

;extension=php_mysql.so

extension=php_mysql.so

4

我的猜测是您的PHP安装未使用MySQL支持进行编译。

检查您的配置命令(php -i | grep mysql)。您应该会看到类似的内容'--with-mysql=shared,/usr'

您可以在http://php.net/manual/en/mysql.installation.php上查看完整的说明。虽然,我宁愿使用@wanovak提出的解决方案。

不过,我认为您需要MySQL支持才能使用PDO。


1

用标记问题ubuntu,但是取消注释的解决方案extension=mysqli.dll特定于Windows。无论如何,我很困惑?!,第一件事跑了<? php phpinfo ?>mysql*正在Configuration标题下搜索。如果看不到这种情况,则表示您尚未安装或启用php-mysql。所以先安装php-mysql

sudo apt get install php-mysql

该命令将php-mysql根据php您已安装的版本进行安装,因此无需担心版本!!

然后是unix特定的解决方案,在php.ini文件中取消注释行

extension=msql.so

验证msql.so存在于/usr/lib/php/<timestamp_folder>ELSE

extension=path/to/msql.so

后来终于重新启动apachemysql服务,与您现在应该看到mysql下部分Configrations的标题phpinfo page


0

我收到此错误是因为正在处理的项目是在php 5.6上开发的,安装后,该项目无法在php7.1上运行。

仅对于在nguntx目录(/ etc / nginx /)中将Vagrant与ubuntu / nginx一起使用的任何人,都有一个名为“ sites-available”的目录,其中包含一个名为象为无业游民的机器配置的url的文件。就我而言是homestead.app。在此文件中,有一行显示类似

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

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

用谷歌搜索,但实际上并不能找到一个简单的答案,说出要看的地方和要更改的地方。

希望这对任何人都有帮助。谢谢。


0

对于CentOS 7.8和PHP 7.3

yum install rh-php73-php-mysqlnd

然后重新启动apache / php。


-1

如果您得到错误为

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

请登录到cPanel >>单击“选择PHP版本” >>选择扩展名MYSQL


4
在该问题中没有暗示OP正在使用CPanel。
昆汀

-2

(Windows mysql配置)

步骤1:转到Apache控制面板> Apache>配置> PHP.ini

步骤2:在记事本(Ctrl + F)中搜索:(;extension_dir = ""可以用注释;)。将此行替换为:(extension_dir = "C:\php\ext"请不要删除;句子开头的)。

步骤3:搜索:extension=php_mysql.dll并删除;开头的。

步骤4:保存并重新启动Apache HTTP Server。(在Windows上,这通常是通过UI完成的)

而已 :)

如果您收到有关丢失的错误 php_mysql.dll可能需要从php.net网站或pecl.php.net下载此文件。(请谨慎考虑从何处获得)

有关PHP的更多信息:在Windows安装扩展-手册


1
尽管这对于Windows可能是正确的,但是这个问题被标记为Ubuntu,而它C:\\php在系统上肯定没有。
tadman '16

@tadman没关系,是否适用于Ubuntu,它在Windows上全新安装后今天对我有用。
拉维·盖拉夫·潘迪

1
@RaviGauravPandey原始问题与Ubuntu有关。在Windows上为您工作并不重要。这是Windows对Ubuntu问题的答案。
塔德曼

-3

必须有一些语法错误。复制/粘贴此代码,看看它是否有效:

<?php
    $link = mysql_connect('localhost', 'root', '');
    if (!$link) {
        die('Could not connect:' . mysql_error());
    }
    echo 'Connected successfully';
    ?

我有同样的错误信息。原来我使用的是msql_connect()函数而不是mysql_connect()


OP具有未定义的函数mysql_connect而不是msql_connect,因此他没有按照您的建议键入错误。
Logicalbloke
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.