PHPとデータベース - MySQL

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
2021年3月7日 (日) 00:44時点におけるWiki (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

概要

PHPにおいて、MySQLへの接続とCRUDの手順を記載する。


MySQLの接続・切断

MySQLの接続

MySQLへ接続するには、mysql_connect関数を使用する。

resource mysql_connect([string server [, string username [, string password [, bool new_link [, int client_flags]]]]])

MySQLサーバへ接続または再利用する。

引数:
   server  接続先のMySQLサーバ。
           <ホスト名またはIPアドレス>:<ポート番号>のように、ポート番号を指定することが可能であり、
           ホスト名またはIPアドレスでは、:/path/to/socketのようにソケットへのパスを指定することも可能である。
           <ホスト名またはIPアドレス>または<ホスト名またはIPアドレス>:<ポート番号>を指定する場合、
           MySQLクライアントライブラリはそれをオーバーライドして、ローカルソケット(Windowsでは名前付きパイプ)に接続する。

   username  ユーザ名

   password  パスワード

   new_link  例えば、同じ引数で2度mysql_connect関数を実行する場合、
             2度目は新規のリンクが確立されるのではなく、代わりに既に接続しているリンクのリンクIDを返す。
             new_linkはこの動作を変更して、既にmysql_connect関数が同じ引数で実行されている場合でも、常に新規のリンクを開く。

   client_flags  圧縮プロトコルやSSL暗号化(Windows版は未対応)等の引数の指定

戻り値:
   成功する場合はMySQLのリンクID、失敗する場合はfalseを返す。


以下の例では、MySQLサーバへ接続している。

 $link = mysql_connect('localhost', 'user', 'pass');         // ホスト名のみ
 $link = mysql_connect('example.com:3307', 'user', 'pass');  // ホスト名とポート番号
 $link = mysql_connect('127.0.0.1:3307', 'user', 'pass');    // IPアドレスとポート番号
 $link = mysql_connect('/tmp/mysql', 'user', 'pass');        // ソケットのみ



MySQLの切断

MySQLへの接続を切断するには、mysql_close関数を使用する。

bool mysql_close([resource link_identifier])

link_identifierが指すMySQLへの非持続的リンクを閉じる。
link_identifierを省略する場合、最後に開いたリンクが使用される。

持続的ではないリンクは、スクリプトの実行終了時に自動的に閉じるため、通常は、mysql_close関数は不要である。

引数:
   link_identifier  MySQLのリンクID

戻り値:
   成功する場合はtrue、失敗する場合はfalseを返す。


以下の例では、MySQLへの接続を明示的に切断している。

 $link = mysql_connect('localhost', 'user', 'pass');
 
 // ...MySQLのCRUD処理
 
 mysql_close($link);



エラー処理

MySQLに対する処理でエラーが発生する場合、mysql_error関数を使用して、エラーメッセージを取得することができる。

string mysql_error([resource link_identifier])

直近のMySQL関数からのエラー文字列を返す。
MySQLのバックエンドのエラーは警告が発生しないため、 代わりに、mysql_error関数を使用してエラー文字列を取得する。

引数:
   link_identifier  MySQLのリンクID

戻り値:
   直近のMySQL関数からのエラー文字列を返します。エラーが発生していない場合は、空文字列を返す。


以下の例では、mysql_connect関数でエラーが発生した場合にエラーメッセージを取得している。

 $link = mysql_connect('localhost', 'user', 'pass');
 if(!$link)
 {
    print(mysql_error());
 }
 
 // ...MySQLに対するCRUD処理
 
 mysql_close($link);


MySQLの接続に失敗する場合、その後のMySQLに対する処理を実行できないため、
exit関数またはdie関数を使用して、プログラムを終了する。
exit関数およびdie関数の詳細は、PHPの基礎 - PHPの終了処理を参照すること。

 $link = mysql_connect('localhost', 'user', 'pass');
 if(!$link)
 {
    die('接続失敗です。'.mysql_error());
 }
 
 // ...MySQLに対するCRUD処理
 
 mysql_close($link);


以下の例では、MySQLの接続と切断を実行している。

 <?php
    $link = mysql_connect('localhost', 'testuser', 'testuser');
    if(!$link)
    {
       die('接続失敗です。'.mysql_error());
    }
 
    print('<p>接続に成功しました。</p>');
 
    // ...MySQLに対するCRUD処理
 
    $close_flag = mysql_close($link);
 
    if($close_flag)
    {
       print('<p>切断に成功しました。</p>');
    }
 ?>



データベースの選択

MySQLへ接続後、データベースを選択するには、mysql_select_db関数を使用する。

bool mysql_select_db(string database_name [, resource link_identifier])

データベース名を指定して、アクティブなデータベースに設定する。
それ以降に実行するmysql_query関数は、全てアクティブなデータベース上で実行される。
link_identifierを指定しない場合は、直近に接続したリンクを指定したとみなされる。

引数:
   database_name  アクティブにするデータベース名
   link_identifier  MySQLのリンクID

戻り値:
   成功した場合はtrue、失敗する場合はfalseを返す。


SELECT文等のクエリを発行する場合は、アクティブなデータベースに対して実行されるため、
クエリを発行する前に、データベース名を指定してデータベースを選択する必要がある。

また、存在しないデータベースを選択する場合、以下のようなエラーが表示される。

Access denied for user '<ユーザ名>'@'<ホスト名またはIPアドレス>' to databese '<データベース名>'


 <?php
    $link = mysql_connect('localhost', 'user', 'pass');
    if(!$link)
    {
       die('接続失敗です。'.mysql_error());
    }
 
    print('<p>接続に成功しました。</p>');
 
    $db_selected = mysql_select_db('database_name', $link);
    if(!$db_selected)
    {
       die('データベース選択失敗です。'.mysql_error());
    }
 
    print('<p>uriageデータベースを選択しました。</p>');
 
    // ...MySQLに対するCRUD処理
 
    $close_flag = mysql_close($link);
    if($close_flag)
    {
       print('<p>切断に成功しました。</p>');
    }
 ?>