PHPでMySQLを利用するには

PHPからMySQLを利用するには、先頭にmysqlという名前のつくPHPの関数を使います(参照:PHP関数リファレンス)。MySQLを使用する場合、PHPの処理は大まかに次のような流れになります。

@ MySQLに接続
A SQLの実行
B SQLの実行結果を表示
C MySQLから切断

■ MySQLとの接続・切断

データベースの処理を行うには、まずデータベースに接続する必要があります。データベースとの接続が確立されてはじめて具体的な処理を行うことができるようになります。また、開いた扉を閉じるように接続したものは必要がなくなれば切断します。PHPの場合はスクリプトが終了した段階で自動的に切断が行われるので、明示的に切断コードを書く必要はありませんが、より確実なスクリプトを目指す場合には切断処理を書くようにしてください。

MySQLへの接続にはmysql_connectという関数を使います。

int mysql_connect(ホスト名, ユーザ名, パスワード)

■ 引数

ホストには接続するMySQLサーバのホスト名を指定します。また「ホスト名:ポート番号」でポート番号を指定できます。ユーザ名とパスワードにはMySQLサーバでのユーザー名とパスワードを指定します。

■ 戻り値

int型の値を返します。成功した場合は、MySQLとの接続IDを、失敗した場合は0を返します。MySQLとの接続ではエラーが発生することがあるので、必ず戻り値をチェックします。

mysql_connectは接続に成功すると接続IDを返してきます。接続以後の処理はこの接続IDがデータベース処理のカギとなります。

MySQLとの接続が確立した後は、利用するデータベースを選択します。データベースの選択にはmysql_select_dbという関数を使います。

bool mysql_select_db (データベース名, 接続ID)

■ 引数

データベース名には利用するデータベース名を指定します。接続IDにはmysql_connectで取得した接続IDを指定します。

■ 戻り値

成功の場合にはtrue、エラーの場合にはfalseを返します。データベースの選択処理時は権限などの関係でエラーが発生することがあります、戻り値はチェックしたほうが良いでしょう。

MySQlからの切断にはmysql_closeという関数を使います。

bool mysql_close ()

■ 戻り値

成功の場合にはtrue、エラーの場合にはfalseを返します。切断時にエラーが発生することはほとんどないので、戻り値の判定は省略することがあります。

■ 接続から切断の処理の例

<?
//データベースに接続
if (!$con = mysql_connect("localhost", "mysql", "password")) {
echo "接続失敗" ;
exit ;
}

//データベースを選択
if(!mysql_select_db("tsumiki", $con)) {
echo "データベース選択失敗" ;
exit ;
}

//ここにSQL実行などの処理が入る

//データベースから切断
mysql_close($con) ;
?>

■ SQLの実行

MySQLに接続した後は、mysql_connectで取得した接続IDを使ってSQLを実行します。SQLの実行にはmysql_queryという関数を使います。

int mysql_query(SQL文, 接続ID)

■ 引数

SQL文には実行するSQL文を指定します。接続IDにはmysql_connectで取得した接続IDを指定します。

■ 戻り値

成功の場合には結果ID(0以外の値)を返します。失敗した場合はfalse(=0)を返します。この関数で返された結果IDは後のレコードの取得処理などで使います。

SELECT文を実行した場合は、mysql_fetch_arrayという関数で検索結果のレコードを取り出します。

array mysql_fetch_array(SQLの結果ID)

■ 引数

mysql_queryで取得したIDを指定します。

■ 戻り値

検査結果のレコードを連想配列(および配列)で返されます。最終行に達した場合はfalse(= 0)を返します。

SQL実行処理が終わったとは使用した結果セットをクリアします。スクリプト終了時に自動的にクリアされますが、より確実なスクリプトを目指すなら手動でクリアしておくほうが良いでしょう。結果セットのクリアには mysql_free_resultを使います。

mysql_free_result(SQLの結果ID)

■ 引数

mysql_queryで取得した結果IDを指定します。

■ SELECT文での結果取得処理の例

簡単なSELECT文での結果取得処理は次のようになります。

<?
//データベースに接続
if (!$con = mysql_connect("localhost", "mysql", "password")) {
echo "接続失敗" ;
exit ;
}

//データベースを選択
if (!mysql_select_db("tsumiki", $con)) {
echo "データベース選択失敗" ;
exit ;
}

//SELECT文を実行
if (!$res = mysql_query("select id, name from test_tbl")) {
echo "SQL失敗<BR>" ;
exit ;
}

//検索した結果を全部表示
while ($row = mysql_fetch_array($res)) {
echo "id = " . $row["id"] ;
echo "name = " . $row["name"] ;
echo "<BR>" ;
}

//結果セットの開放
mysql_free_result ($res) ;

//データベースから切断
mysql_close($con) ;
?>

この例でわかりにくいのは、SELECT文実行処理の中にあるmysql_fetch_arrayでレコードの取得を行う部分だと思います。この例では、取得したレコードを$rowという配列に格納しています。配列というと面倒くさそうですが、ここの内容を取り出すには$row["フィールド名"]というように配列の添え字としてフィールド名を指定するだけです。フィールド名の代わりに数字を指定することもできます。その場合SELECT文の先頭の番号は0になります。

■ MySQLのエラー処理

PHPのMySQL関数はデータベースとの処理でエラーが発生した場合、ブラウザに自動的にエラーメッセージを出力します。

この機能はスクリプト作成時には非常に便利です。ただし、実際にサイトを公開中にこのようなエラーが出るのは思わしくない場合があります。そういった場合、自動的にメッセージを出力する機能を停止することができます、停止する方法はMySQLの接続関数mysql_connectの前に@(アットマーク)を付けるだけです。

$con = mysql_connect("localhost", "mysql", "password")

      ↓

$con = @mysql_connect("localhost", "mysql", "password")

このようにすることで、メッセージの出力が抑止されます。

なお、エラーが発生した場合のエラーメッセージやエラー番号は次の関数で取得できます。エラーメッセージの出力を抑止した場合はこれらの関数でエラーメッセージをハンドリングすると良いでしょう。

int mysql_errno()

■ 戻り値

直前のデータベース処理で発生したエラー番号。

string mysql_error()

■ 戻り値

直前のデータベース処理で発生したエラーのメッセージ。

例えば独自にエラーメッセージを整形して出力するには次のようなコードを書きます。

//SELECT文を実行
if (!$res = mysql_query ("select id, name from test_tbl")) {
echo "エラー番号 : " . mysql_errno() . "メッセージ : " . mysql_error() ;
exit ;
}

<< 戻る

RIKO's Trial Page | Shirley's i-box | Shirley's little box