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_real_escape_string()
mysql_num_fields()
mysql_num_rows()
mysql_affected_rows()
mysql_fetch_row()
mysql_fetch_array()
mysql_fetch_assoc()
mysql_free_result()
mysql_close()
mysql_insert_id()
代用関数の例
/**
* カラムは、フィールド名を添字とする配列形式で返されます。
* @var int
*/
define('MYSQL_ASSOC', MYSQLI_ASSOC);
/**
* カラムは、数値の添字とフィールド名の添字のどちらでもアクセスできる 配列形式で返されます。
* @var int
*/
define('MYSQL_BOTH', MYSQLI_BOTH);
/**
* カラムは、数値の添字を持つ配列形式で返されます。添字は 0 からはじまり、 結果の最初のフィールドです。
* @var int
*/
define('MYSQL_NUM', MYSQLI_NUM);
/**
* 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($__mysql_connect, $unescaped_string);
}
/**
* mysql_real_escape_string() の代用関数です。
*
* @param string $unescaped_string エスケープされる文字列
* @return string エスケープされた文字列を返します。
*/
function mysql_real_escape_string($unescaped_string, $link_identifier = null) {
global $__mysql_connect;
return mysqli_real_escape_string($__mysql_connect, $unescaped_string);
}
/**
* mysql_num_fields() の代用関数です。
* @param mysql_result $result クエリ結果
* @return int|false 成功した場合に結果セット resource のフィールド数、 失敗した場合に FALSE を返します。
*/
function mysql_num_fields($result) { return mysqli_num_fields($result); }
/**
* mysql_num_rows() の代用関数です。
* @param mysql_result $result クエリ結果
* @return int 行数
*/
function mysql_num_rows($result) { return mysqli_num_rows($result); }
/**
* mysql_affected_rows() の代用関数です。
* @param mysqli $link_identifier MySQL 接続。指定されない場合、mysql_connect() の代用関数により直近にオープンされたインスタンスが使用されます。
* @return int 成功した場合に変更された行の数を、直近のクエリが失敗した場合に -1 を返します。
*/
function mysql_affected_rows($link_identifier = null) {
global $__mysql_connect;
return mysqli_affected_rows($link_identifier ?? $__mysql_connect);
}
/**
* 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 を返します。(mysqli_fetch_array() では null)
*/
function mysql_fetch_array($result) { return mysqli_fetch_array($result) ?? false; }
/**
* mysql_fetch_assoc() の代用関数です。
* @param mysql_result $result クエリ結果
* @return array|false 取得した行に対応する文字列の連想配列を返します。行がもうない場合には FALSE を返します。
*/
function mysql_fetch_assoc($result) { return mysqli_fetch_assoc($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 = null) {
global $__mysql_connect;
return mysqli_close($link_identifier ?? $__mysql_connect);
}
/**
* mysql_insert_id() の代用関数です。
* @param mysqli $link_identifier MySQL 接続。指定されない場合、mysql_connect() の代用関数により直近にオープンされたインスタンスが使用されます。
* @return int 直近のクエリにより AUTO_INCREMENT カラム用に生成された ID を返します。直近のクエリが AUTO_INCREMENT な値を生成しなかった 場合に 0 を返します。
*/
function mysql_insert_id($link_identifier = null) {
global $__mysql_connect;
return mysqli_insert_id($link_identifier ?? $__mysql_connect);
}
使用例
$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');
var_dump([
'mysql_escape_string' => mysql_escape_string('!"#$%&\'()=~|'),
'mysql_real_escape_string' => mysql_real_escape_string('!"#$%&\'()=~|'),
'mysql_num_fields' => mysql_num_fields($result),
'mysql_num_rows' => mysql_num_rows($result),
]);
if ($row = mysql_fetch_row($result)) {
var_dump([ 'mysql_fetch_row' => $row ]);
}
if ($row = mysql_fetch_assoc($result)) {
var_dump([ 'mysql_fetch_assoc' => $row ]);
}
mysql_query('INSERT INTO test (name) VALUES (\'abc\')');
var_dump([
'mysql_affected_rows' => mysql_affected_rows($link),
'mysql_insert_id' => mysql_insert_id($link),
]);
mysql_free_result($result);
mysql_close($link);
更新履歴
- 2020/03/11
mysql_connect()
の$link_identifier
が任意引数になっていなかったため修正しましたmysql_escape_string()
で使用しているmysqli_escape_string()
の引数の順番が違っていたため修正しましたmysql_real_escape_string()
mysql_fetch_assoc()
mysql_num_fields()
mysql_affected_rows()
mysql_insert_id()
を追加しました
- 2020/02/15 初版