MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLの結果セットに関連付けられたカーソルメモリを解放するPHPスクリプトの書き方


PHPでは、MySQLのクエリ結果(結果セット)に関連付けられたカーソルメモリを解放するために、mysql_free_result()関数を使用します。大量のレコードを扱うスクリプトでは、データ取得後にこの関数を呼び出すことで、メモリを明示的に解放し、サーバーリソースを効率的に管理できます。

サンプルスクリプト

以下の例では、「tutorials_tbl」というテーブルからレコードを取得した後、mysql_free_result()を使ってメモリを解放しています。

<?php
    $dbhost = 'localhost:3036';
    $dbuser = 'root';
    $dbpass = 'rootpassword';
    $conn = mysql_connect($dbhost, $dbuser, $dbpass);

    if(! $conn ) {
        die('Could not connect: ' . mysql_error());
    }

    $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date
        FROM tutorials_tbl';
    mysql_select_db('TUTORIALS');
    $retval = mysql_query( $sql, $conn );

    if(! $retval ) {
        die('Could not get data: ' . mysql_error());
    }

    while($row = mysql_fetch_array($retval, MYSQL_NUM)) {
        echo "Tutorial ID :{$row[0]} <br> ".
            "Title: {$row[1]} <br> ".
            "Author: {$row[2]} <br> ".
            "Submission Date : {$row[3]} <br> ".
            "--------------------------------<br>";
    }
    mysql_free_result($retval);
    echo "Fetched data successfully\n";
    mysql_close($conn);
?>

コードの解説

  • 接続の確立: mysql_connect()でMySQLサーバーに接続し、失敗した場合はdie()でスクリプトを終了します。
  • クエリの実行: mysql_query()でSELECT文を実行し、結果リソースを変数$retvalに格納します。
  • データの取得: whileループ内でmysql_fetch_array()を使い、1行ずつレコードを取り出して表示します。
  • メモリの解放: すべてのレコード取得が完了したら、mysql_free_result($retval)を呼び出してカーソルメモリを解放します。
  • 接続の切断: 最後にmysql_close()でデータベース接続を閉じます。

注意点:mysql拡張モジュールの非推奨化

上記のようなmysql_*系関数はPHP 5.5で非推奨となり、PHP 7.0で削除されました。そのため、現行の開発環境では代わりに以下のAPIを使用することが推奨されます。

  • mysqli拡張モジュール: mysqli_free_result()関数で同様に結果セットのメモリを解放できます。
  • PDO: PDOStatement::closeCursor()メソッドでカーソルを閉じることができます。

これらの新しいAPIはプリペアドステートメントに対応しており、SQLインジェクション対策などのセキュリティ面でも優れています。新規プロジェクトでは、必ずmysqliまたはPDOを採用しましょう。

  1. PHPとMySQLでブール値を扱うには?BOOL・BOOLEAN・TINYINT(1)の違いと使い方

    本記事では、MySQL 8.0.12を使用して、ブール(Boolean)値の正しい取り扱い方を解説します。まず、使用しているMySQLのバージョンを確認しておきましょう。 mysql> select version(); +-----------+ | version() | +-----------+ | 8.0.12 | +-----------+ 1 row in set (0.00 sec) MySQLにおけるブール値の基本:BOOL・BOOLEAN・TINYINT(1) MySQLでブール値を扱うには、BOOL、BOOLEAN、またはTINYINT(1)のいずれかを使用

  2. MySQLで「&amp;」を「&」に置き換える方法を解説

    MySQLで「&amp;」を「&」に置き換える方法データベースにHTMLエンティティ形式の「&amp;」が保存されており、これを通常のアンパサンド「&」に変換したいケースはよくあります。そんなときは、MySQLのREPLACE()関数を使えば簡単に解決できます。REPLACE()関数は、文字列の中から指定した部分文字列を検索し、別の文字列に置き換えることができる便利な関数です。ここでは、サンプルテーブルを使いながら、実際の置き換え手順を順番に解説していきます。手順1:サンプルテーブルを作成するまず、以下のコマンドでテーブルを作成します。mysql> cre