【问题标题】:Undefined function mysql_connect()未定义函数 mysql_connect()
【发布时间】:2012-11-29 07:00:59
【问题描述】:

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

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

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

【问题讨论】:

  • 其他内置的 PHP/MySql 函数怎么样?它们有用吗?
  • 也许不是,因为我尝试输入错误的用户/密码,但我的“或死”语句未显示!

标签: php mysql ubuntu mysql-connect undefined-function


【解决方案1】:

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

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

【讨论】:

  • 对我来说完美的解决方案,我还不能升级并破坏我现有的所有代码。但是,文件中的全局 $con 变量是一个问题,因为包含的文件无法读取包含它的构造函数的父类的全局变量。但是,我只是在需要的包含文件的函数中创建了一个连接变量。现在我的代码工作正常。谢谢。
  • 谢谢 .. 它在生产升级到 php7 和 php5 应用程序崩溃时救了我的命
  • 这是一个很好的解决方法,可以节省升级古老的 PHP 应用程序的时间。非常感谢。
【解决方案2】:

我看到你用 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

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

【讨论】:

  • 我无法找到包 php7.0
  • 用 7.3 替换 7.0
  • 对我来说是:sudo apt-get install php7.4-mysql && sudo service apache2 restart
【解决方案3】:

嗯,这是你的机会!看起来PDO 准备好了;改用它。

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

<?php
    phpinfo();
?>

如果不存在,请将以下内容添加到 php.ini 文件中:

extension=php_mysql.dll

【讨论】:

  • 这是连接数据库的更好方法吗?我会调查它,但我真的很想先让它工作,因为它以前工作,直到我搬到新服务器。
  • 是的。 mysql_* 函数是危险的,自 PHP 4.1 起已弃用。检查您的 Apache 错误日志并重新启动服务器。这行得通吗?
  • 我正在使用 xampp,将该行添加到 php.ini 后,我在 apache error.log 中收到以下消息 无法加载动态库 '\\xampp\\php\\ext \\php_mysql.dll
  • @defmx .dll 文件是否存在于该路径中?如果没有,您需要安装它。
【解决方案4】:

如果有人遇到docker php official images 的问题,请在 docker 容器中输入以下命令。

$ docker-php-ext-install mysql mysqli pdo pdo_mysql

更多信息,请参考上面的链接How to install more PHP extensions部分(但对我来说有点难......)。

或者这个文档可以帮助你。

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

【讨论】:

  • mysql 是我想要的
【解决方案5】:

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

【讨论】:

    【解决方案6】:

    试试:

    <?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
    

    extension=php_mysql.so
    

    【讨论】:

      【解决方案7】:

      在 php.ini 文件中

      改一下

      ;extension=php_mysql.dll
      

      进入

      extension=php_mysql.dll
      

      【讨论】:

        【解决方案8】:

        我的猜测是您的 PHP 安装没有使用 MySQL 支持编译。

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

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

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

        【讨论】:

          【解决方案9】:

          问题标记为ubuntu,但取消注释extension=mysqli.dll 的解决方案特定于Windows。我在这里感到困惑?!无论如何,首先运行&lt;? php phpinfo ?&gt; 并在Configuration 标题下搜索mysql*。如果您没有看到这样的事情,则意味着您尚未安装或启用php-mysql。所以先安装php-mysql

          sudo apt get install php-mysql

          这个命令会根据你已经安装的php安装php-mysql,所以不用担心版本!!。

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

          extension=msql.so
          

          验证msql.so 是否存在于/usr/lib/php/&lt;timestamp_folder&gt; 中, 否则

          extension=path/to/msql.so
          

          然后最后重新启动apachemysql 服务,您现在应该会在Configrations 标题下看到mysql 部分phpinfo page

          【讨论】:

            【解决方案10】:

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

            对于任何在 ubuntu/nginx 中使用 Vagrant 的人,在 nginx 目录(/etc/nginx/)中,有一个名为“sites-available”的目录,其中包含一个名称类似于为 vagrant 机器配置的 url 的文件。在我的例子中是 homestead.app。在这个文件中有一行写着类似

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

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

            用谷歌搜索了这个,但并没有真正找到一个简单的答案,说明在哪里寻找和改变什么。

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

            【讨论】:

              【解决方案11】:

              适用于 CentOS 7.8 和 PHP 7.3

              yum install rh-php73-php-mysqlnd
              

              然后重启apache/php。

              【讨论】:

                【解决方案12】:

                如果您收到错误为

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

                请登录cPanel >>点击选择Php版本>>选择扩展名MYSQL

                【讨论】:

                • 在问题中没有暗示 OP 正在使用 CPanel。
                【解决方案13】:

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

                <?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 所以他没有按照你的建议输入错误。
                【解决方案14】:

                (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 服务器。 (在 Windows 上,这通常通过 UI 完成)

                就是这样:)

                如果您收到关于缺少php_mysql.dll 的错误,您可能需要从 php.net 站点或 pecl.php.net 下载此文件。 (请注意你从哪里得到它)

                更多信息PHP: Installation of extensions on Windows - Manual

                【讨论】:

                • 虽然这对 Windows 来说可能是正确的,但这个问题被标记为 Ubuntu,它在系统上肯定没有 C:\\php
                • @tadman 是否适用于 Ubuntu,在 Windows 上全新安装后,它今天对我有用。
                • @RaviGauravPandey 最初的问题与 Ubuntu 有关。它在 Windows 上为您工作并不是重点。这是一个 Ubuntu 问题的 Windows 答案。
                猜你喜欢
                • 2012-05-26
                • 2016-03-15
                • 1970-01-01
                • 2011-10-25
                • 2012-01-22
                • 1970-01-01
                相关资源
                最近更新 更多