【问题标题】:Fatal error: Uncaught Error: Call to undefined function mysql_connect()致命错误:未捕获错误:调用未定义函数 mysql_connect()
【发布时间】:2016-04-07 08:30:13
【问题描述】:

我正在尝试与 XAMPP 和 MySQL 服务器进行简单连接,但每当我尝试输入数据或连接到数据库时,都会收到此错误。

致命错误:未捕获的错误:调用 C:\xampp\htdocs\register.php:22 中未定义的函数 mysql_connect()
堆栈跟踪:#0 {main} 在第 22 行的 C:\xampp\htdocs\register.php 中抛出

第 22 行示例:

$link = mysql_connect($mysql_hostname , $mysql_username);

【问题讨论】:

  • 将 mysql_connect($mysql_hostname , $mysql_username) 更改为 mysql_connect($mysql_hostname , $mysql_username, $mysql_password) 。另外,切换到 PDO 或 MySQLi!
  • 如果我不在 phpmyadim 上使用密码? (试图做所有那些远程的事情只是因为我需要手机能够连接到数据库)
  • 如果您在使用旧版 CodeIgniter 时遇到此错误,请在您的 config/database.php 中使用此错误:'dbdriver' => 'mysqli',(将 mysql 更改为 mysqli

标签: php mysql xampp


【解决方案1】:

mysql_* 函数已在 PHP 7 中删除。

您可能在 XAMPP 中安装了 PHP 7。您现在有两个选择:MySQLiPDO

此外,here 是一个关于 PDO 的不错的 wiki 页面。

【讨论】:

    【解决方案2】:

    您可以使用mysqli_connect($mysql_hostname , $mysql_username) 代替mysql_connect($mysql_hostname , $mysql_username)

    mysql_* 函数已从 PHP 7 中删除。您现在有两个选择:MySQLiPDO

    【讨论】:

    • 可能需要对您的代码进行其他更改。
    • 在 Ubuntu 16.04 上,这需要 php7.0-mysql 包。正如@ceejayoz 所说,实际上需要对 API 进行一些更改,不仅是函数名称,还有参数的顺序。非常令人沮丧。
    • 粗略,但它对我有用,至少在我使用 PDO 连接优化我的代码之前
    【解决方案3】:

    建议使用 MySQLi 或 PDO 扩展。 不建议使用旧的 mysql 扩展进行新的开发,因为它在 PHP 5.5.0 中已被弃用并在 PHP 7 中被删除。

    PHP 提供了三种不同的 API 来连接 MySQL。下面我们展示 mysql、mysqli 和 PDO 扩展提供的 API。每个代码 sn-p 使用用户名“username”和密码“password”创建到在“example.com”上运行的 MySQL 服务器的连接。并运行一个查询来问候用户。

    示例 #1 比较三个 MySQL API

    <?php
    // mysqli
    $mysqli = new mysqli("example.com", "username", "password", "database");
    $result = $mysqli->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
    $row = $result->fetch_assoc();
    echo htmlentities($row['_message']);
    
    // PDO
    $pdo = new PDO('mysql:host=example.com;dbname=database', 'username', 'password');
    $statement = $pdo->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
    $row = $statement->fetch(PDO::FETCH_ASSOC);
    echo htmlentities($row['_message']);
    
    // mysql
    $c = mysql_connect("example.com", "username", "password");
    mysql_select_db("database");
    $result = mysql_query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
    $row = mysql_fetch_assoc($result);
    echo htmlentities($row['_message']);
    ?>
    

    我建议您同时尝试 MySQLi 和 PDO,并找出您喜欢哪种 API 设计。

    阅读Choosing an APIWhy shouldn't I use mysql_* functions in PHP?

    【讨论】:

      【解决方案4】:

      正如其他答案所暗示的那样......有些人(无论出于何种原因)认为您的旧代码在您升级 PHP 时不应该工作,因为他比您更了解并且不关心您的代码做什么或多么简单是给你升级的。

      好吧,如果你不能在一夜之间升级你的项目,你可以

      将您的 PHP 版本降级到任何可用的版本

      或者...

      使用 shim(一种 polyfill),例如 https://github.com/dshafik/php7-mysql-shimhttps://github.com/dotpointer/mysql-shim,然后在代码中的某处找到 include_once("choice_shim.php"); 的位置

      这将使您的旧 PHP 代码保持正常运行,直到您有心情更新...

      【讨论】:

        【解决方案5】:

        mysql_* 函数已在 PHP 7 中删除。

        您现在有两个选择:MySQLiPDO

        以下是迁移到 MySQLi 替代方案之前 (-) 和之后 (+) 的比较,直接取自工作代码:

        -if (!$dbLink = mysql_connect($dbHost, $dbUser, $dbPass))
        +if (!$dbLink = mysqli_connect($dbHost, $dbUser, $dbPass))
        
        -if (!mysql_select_db($dbName, $dbLink))
        +if (!mysqli_select_db($dbLink, $dbName))
        
        -if (!$result = mysql_query($query, $dbLink)) {
        +if (!$result = mysqli_query($dbLink, $query)) {
        
        -if (mysql_num_rows($result) > 0) {
        +if (mysqli_num_rows($result) > 0) {
        
        -while ($row = mysql_fetch_array( $result, MYSQL_ASSOC )) {
        +while ($row = mysqli_fetch_array( $result, MYSQLI_ASSOC )) {
        
        -mysql_close($dbLink);
        +mysqli_close($dbLink);
        

        【讨论】:

          【解决方案6】:

          mysql_ 函数已从 PHP 7 中删除。您现在可以使用 MySQLiPDO

          MySQLi 示例:

          mysqli_connect($mysql_hostname, $mysql_username, $mysql_password, $mysql_dbname);
          

          mysqli_connect reference link

          【讨论】:

            【解决方案7】:

            确保您没有像我一样犯错

            msyql_fetch_assoc 应该是 mysql

            【讨论】:

              【解决方案8】:

              对于 mysqli,您可以使用:

              $db = ADONewConnection('mysqli');

              ... ...

              $db->e​​xecute("set names 'utf8'");

              【讨论】:

                【解决方案9】:

                如果我在创建 dockerfile 时遇到类似问题,我会遇到同样的情况:- 我在mysql_connect函数中使用了以下更改为:-

                if($CONN = @mysqli_connect($DBHOST, $DBUSER, $DBPASS)){ //mysql_query("SET CHARACTER SET 'gbk'", $CONN);

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2012-05-23
                  • 2016-09-19
                  • 2016-11-21
                  • 2019-05-22
                  相关资源
                  最近更新 更多