1

在接下来的几天里,PHP 不会推广一些 MySql 功能

PHP 手册中有一些关于清理弃用函数的示例。但例如;当我用下面的代码替换时mysql_query不起作用mysqli_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; 
}
4

3 回答 3

5

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

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

因此,如果您想保持当前代码不变 - 请保留它。
手册中的红框并没有那么可怕,并且这些功能实际上会引发弃用级别错误的版本尚未发布。
所以,你有 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();
于 2013-03-10T11:26:02.757 回答
1

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

于 2013-03-10T11:27:25.967 回答
1

我认为您应该仔细阅读有关迁移的手册部分,因为它专门讨论了两个扩展之间的(次要)差异。

一些例子:

// 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。

于 2013-03-10T11:34:40.403 回答