PHP 7 以降で MySQL 関数を使用 (代用) する

このページは、MySQL 関数 (mysql_connect() など) を使用しているプログラムをPHP 7 以降で動作させるための代用例をまとめる予定のページです。

注意

  • MySQL 関数と同じ関数を定義して、内部でMySQLi 関数を動作させる仕組みになっています。
  • MySQL 関数のすべての関数や機能は網羅していません。
  • コードのライセンスは、CC0 (クレジット表示不要、改変可、商用可) です。

このページで定義している代用関数

  • mysql_connect()
  • mysql_select_db()
  • mysql_set_charset()
  • mysql_error()
  • mysql_errno()
  • mysql_query()
  • mysql_escape_string()
  • mysql_num_rows()
  • mysql_fetch_row()
  • mysql_fetch_array()
  • mysql_free_result()
  • mysql_close()

代用関数の例

/**
 * mysql_connect() の代用関数です。($new_link, $client_flags には現状対応していません)
 * @param string $server サーバーのホスト名 (ini 設定、ソケット、ポート指定には対応していません)
 * @param string $username ユーザー名 (ini 設定には対応していません)
 * @param string $password パスワード (ini 設定には対応していません)
 * @return mysqli|false mysqli のインスタンス
 */
function mysql_connect($server, $username, $password) {
    global $__mysql_connect;
    $__mysql_connect = mysqli_connect($server, $username, $password);
    return $__mysql_connect;
}

/**
 * mysql_select_db() の代用関数です。
 * @param string $database_name データベース名
 * @param mysqli $link_identifier MySQL 接続。指定されない場合、mysql_connect() の代用関数により直近にオープンされたインスタンスが使用されます。
 * @return bool 成功した場合に TRUE を、失敗した場合に FALSE を返します。
 */
function mysql_select_db($database_name, $link_identifier = null) {
    global $__mysql_connect;
    return mysqli_select_db($link_identifier ?? $__mysql_connect, $database_name);
}

/**
 * mysql_set_charset() の代用関数です。
 * @param string $charset 文字セット (文字コード) 名
 * @param mysqli $link_identifier MySQL 接続。指定されない場合、mysql_connect() の代用関数により直近にオープンされたインスタンスが使用されます。
 * @return bool 成功した場合に TRUE を、失敗した場合に FALSE を返します。
 */
function mysql_set_charset($charset, $link_identifier = null) {
    global $__mysql_connect;
    return mysqli_set_charset($link_identifier ?? $__mysql_connect, $charset);
}

/**
 * mysql_error() の代用関数です。
 * @param mysqli $link_identifier MySQL 接続。指定されない場合、mysql_connect() の代用関数により直近にオープンされたインスタンスが使用されます。
 * @return string 直近の MySQL 関数からのエラー文字列を返します。エラーが発生していない 場合には、'' (空文字列) を返します。
 */
function mysql_error($link_identifier = null) {
    global $__mysql_connect;
    return mysqli_error($link_identifier ?? $__mysql_connect);
}

/**
 * mysql_errno() の代用関数です。
 * @param mysqli $link_identifier MySQL 接続。指定されない場合、mysql_connect() の代用関数により直近にオープンされたインスタンスが使用されます。
 * @return int 直近の MySQL 関数からのエラー番号を返します。エラーが発生していない 場合は、0 (ゼロ)を返します。
 */
function mysql_errno($link_identifier = null) {
    global $__mysql_connect;
    return mysqli_errno($link_identifier ?? $__mysql_connect);
}

/**
 * mysql_query() の代用関数です。
 * @param string $query SQL クエリ
 * @param mysqli $link_identifier MySQL 接続。指定されない場合、mysql_connect() の代用関数により直近にオープンされたインスタンスが使用されます。
 * @return mysql_result|bool 結果
 */
function mysql_query($query, $link_identifier = null) {
    global $__mysql_connect;
    return mysqli_query($link_identifier ?? $__mysql_connect, $query);
}

/**
 * mysql_escape_string() の代用関数です。
 *
 * @param string $unescaped_string エスケープされる文字列
 * @return string エスケープされた文字列を返します。
 */
function mysql_escape_string($unescaped_string) {
    global $__mysql_connect;
    return mysqli_escape_string($unescaped_string, $__mysql_connect);
}

/**
 * mysql_num_rows() の代用関数です。
 * @param mysql_result $result クエリ結果
 * @return int 行数
 */
function mysql_num_rows($result) { return mysqli_num_rows($result); }

/**
 * mysql_fetch_row() の代用関数です。
 * @param mysql_result $result クエリ結果
 * @return array|false 取得された行に対応する文字列の配列を返します。もう行がない場合は、 FALSE を返します。(mysqli_fetch_row() では null)
 */
function mysql_fetch_row($result) { return mysqli_fetch_row($result) ?? false; }

/**
 * mysql_fetch_array() の代用関数です。($result_type は現状対応していません)
 * @param mysql_result $result クエリ結果
 * @return array|false 取得された行に対応する文字列の配列を返します。もう行がない場合は、 FALSE を返します。(mysql_fetch_array() では null)
 */
function mysql_fetch_array($result) { return mysqli_fetch_array($result) ?? false; }

/**
 * mysql_free_result() の代用関数です。
 * @param mysql_result $result クエリ結果
 * @return bool 常に true (mysqli_free_result() が値を返さないため)
 */
function mysql_free_result($result) { mysqli_free_result($result); return true; }

/**
 * mysql_close() の代用関数です。
 * @param mysqli $link_identifier MySQL 接続。指定されない場合、mysql_connect() の代用関数により直近にオープンされたインスタンスが使用されます。
 * @return bool 成功した場合に TRUE を、失敗した場合に FALSE を返します。
 */
function mysql_close($link_identifier) { return mysqli_close($link_identifier); }

使用例

$link = mysql_connect('localhost', 'root', 'root');
if (!$link) {
    die('接続に失敗しました');
}
mysql_set_charset('utf8');

if (!mysql_select_db('test')) {
    die(mysql_errno() . ': ' . mysql_error());
}

$result = mysql_query('SELECT * FROM test');
if ($row = mysql_fetch_row($result)) {
    var_dump($row);
}
mysql_free_result($result);
mysql_close($link);