不推荐使用的 MySql 函数 [重复]

Posted

技术标签:

【中文标题】不推荐使用的 MySql 函数 [重复]【英文标题】:Deprecated MySql Functions [duplicate] 【发布时间】:2013-02-25 15:04:30 【问题描述】:

在接下来的几天里,php 不会推广 some mysql functions。

PHP 手册中有一些关于清理弃用函数的示例。但例如;当我在下面的代码中用mysqli_query 替换mysql_query 时不起作用。 Notepad++ 也将它们视为自己定义的函数。所有示例都使用 PHP 手册中的 OOP。我需要一个不使用面向对象编程的例子。

谁能告诉我如何从已弃用的 mysql 函数中清除我的代码?

function db_connect_select() 

        $connection = @mysql_connect(MYSQL_HOSTNAME, USERNAME_SELECT, PASSWORD);

        if (!$connection)
        
          return false; 
        

        if (!mysql_select_db(DATABASE))
        
          return false; 
        

        mysql_query("SET NAMES UTF8");

        return $connection;    


function db_result_to_array($result) 

    $res_array = array();

    for ($count = 0; $row = mysql_fetch_array($result); $count++)
    
      $res_array[$count] = $row;    
    
    return $res_array;



function select_top_tags()

    $connection = db_connect_select();

    $query = 'SELECT * FROM top_tags ORDER BY tag_name ASC';

    $result = db_result_to_array(mysql_query($query));

    if(mysql_ping($connection))
    
        mysql_close($connection); 
     

    return $result; 

【问题讨论】:

mysqli 的工作方式与 mysql 略有不同。您不能只在每个函数调用中添加 i 并期望它能够正常工作。 (如果这就是你要问的) 如果您使用 mysql 创建数据库,我认为,它不适用于 mysqli 函数。它们是不同的。 更多使用mysqli的例子可以到php.net/manual/en/mysqli.query.php找到 @Amir:完全错误。它只是一个数据库,不管是什么创建的。 【参考方案1】:

这毫无意义。 单纯的机械更换是没有用的。

您必须了解它本身并不是旧功能,而是不鼓励使用旧方法。

因此,如果您想保持当前代码不变,只需保留它即可。 手册中的红框并没有那么吓人,而且这些函数实际上会引发弃用级别错误的版本尚未发布。 所以,你有 3-4 年的时间,在你遇到任何不便之前。即使这样,关闭已弃用级别的错误也是一个运行时设置的问题。

但是,如果您想编写更好的代码 - 您必须使用带有 PDO 的 OOP 方式(我可以向您保证,OOP 并不是 吓人的。虽然写的时候需要一些知识,但是使用现成的类还是很方便的。和熟悉的函数唯一的区别就是有点->的东西。没什么大不了的)

所以,给你:

function db_connect_select() 

    $dsn = 'mysql:host='.MYSQL_HOSTNAME.';dbname='.DATABASE.';charset=utf8';
    $opt = array(
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    ); 
    return new PDO($dsn,USERNAME_SELECT, PASSWORD, $opt);


function db_result_to_array($query,) 

  // not needed with PDO


function select_top_tags()

    global $pdo;

    $query = 'SELECT * FROM top_tags ORDER BY tag_name ASC';
    $stm = $pdo->prepare($query);
    $stm->execute();
    return $stm->fetchAll();

用法:

$pdo = db_connect_select(); // somewhere in a bootstrap file
$tags = select_top_tags();

【讨论】:

【参考方案2】:

mysqli_* 函数不能直接替代 mysql_* 函数。它们以不同的方式使用,简单的替换是行不通的。网上有很多教程描述了如何在 PHP 中使用 mysqli_* 函数,例如this one.

【讨论】:

【参考方案3】:

我认为您应该仔细阅读 the manual section on migrating,因为它专门讨论了两个扩展程序之间的(微小)差异。

一些例子:

// no select_db, give db to _connect call
$connection = @mysqli_connect(MYSQL_HOSTNAME,USERNAME_SELECT,PASSWORD,DATABASE);

// need to give the connection parameter to mysqli_query
mysqli_query($connection,"SET NAMES UTF8");

等等

正如其他人已经说过的,这个程序界面主要是为了方便和简化过渡而提供的。同时,您应该花一些时间来掌握在较新的数据库接口中使用的更现代的概念 - 我强烈建议您看看 PDO,这是目前为止最好的 PHP 数据库 API。

【讨论】:

以上是关于不推荐使用的 MySql 函数 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

不推荐使用 each() 函数;无法弄清楚如何更改为 foreach [重复]

不推荐使用 each() 函数。此消息将在进一步调用 PHP 7.2 时被禁止 [重复]

将项目从PC迁移到其他PC后,错误在codeigniter中不推荐使用each()函数[重复]

PHP 已弃用:each() 函数已弃用 [重复]

不推荐使用 mysql 扩展 [重复]

函数内部的mysqli / mysql查询不起作用[重复]