1

PHP は、今後数日間で一部の MySql 関数を昇格させる予定はありません。

PHP マニュアルには、廃止された関数のクリーニングに関するいくつかの例があります。しかし、例えば; 以下のコードで置き換えるmysql_querymysqli_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年先があります。そして、それでも非推奨レベルのエラーをオフにすることは、1つのランタイム設定の問題です。

しかし、より良いコードを書きたい場合は、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_*。それらは異なる方法で使用され、単純な交換は機能しません。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");

等々

他の人がすでに言ったように、この手続き型インターフェイスは、主に利便性と移行を容易にするために提供されています。同時に、新しい db インターフェイスで使用されている最新の概念を習得するために時間を費やす必要があります。現在のところ、PHP 用の最高のデータベース APIであるPDOを確認することを強くお勧めします。

于 2013-03-10T11:34:40.403 に答える