概要

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


MySQLの接続・切断

MySQLの接続

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

resource mysqli_connect(string host, string username, string passwd, string dbname [, int port [, string socket ]])

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

引数:
   host  接続先のMySQLサーバを指定する。
         <ホスト名またはIPアドレス>:<ポート番号>のように、ポート番号を指定することが可能であり、
         ホスト名またはIPアドレスでは、:/path/to/socketのようにソケットへのパスを指定することも可能である。

         <ホスト名またはIPアドレス>または<ホスト名またはIPアドレス>:<ポート番号>を指定する場合、
         MySQLクライアントライブラリはそれをオーバーライドして、ローカルソケット(Windowsでは名前付きパイプ)に接続する。

   username  ユーザ名

   password  パスワード

   dbname  接続するデータベース名を指定する。

   port  接続するMySQLサーバーのポート番号を指定する。

   socket  使用するソケットを指定する。

戻り値:
   MySQLサーバへの接続オブジェクトを返す。


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

 <?php
    // データベースへの接続に必要な変数を指定
    $host = 'localhost';  // 以下の指定方法も可能
                          // localhost:3307(ホスト名とポート番号)
                          // 127.0.0.1:3307(IPアドレスとポート番号)
                          // /tmp/mysql(ソケットのみ)
    $username = 'root';
    $passwd = 'root';
    $dbname = 'mydb';
 
    // データベースへ接続
    $link = mysqli_connect($host, $username, $passwd, $dbname);
 
    // 接続チェック
    if(!$link)
    {
       die('データベースの接続に失敗しました。');
    }
 
    echo "データベースの接続に成功しました! \n";
 
    // データベースの接続を閉じる
    mysqli_close($link);
 ?>



MySQLの切断

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

bool mysqli_close(mysqli link_identifier])

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

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

引数:
   link_identifier  mysqli_connect関数の戻り値のリンクIDを指定する。

戻り値:
   MySQLの切断に成功する場合はtrue、失敗する場合はfalseを返す。


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

 $host = 'localhost';
 $username = 'root';
 $passwd = 'root';
 $dbname = 'mydb';
 
 // データベースへ接続
 $link = mysqli_connect($host, $username, $passwd, $dbname);
 
 // ...MySQLのCRUD処理
 
 mysqli_close($link);



エラー処理

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

string mysqli_error(mysqli link_identifier])

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

引数:
   link_identifier  MySQLのリンクID

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


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

 $host = 'localhost';
 $username = 'root';
 $passwd = 'root';
 $dbname = 'mydb';
 
 // データベースへ接続
 $link = mysqli_connect($host, $username, $passwd, $dbname);
 
 if(!$link)
 {
    print(mysqli_error());
 }
 
 // ...MySQLに対するCRUD処理
 
 mysqli_close($link);


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

 $host = 'localhost';
 $username = 'root';
 $passwd = 'root';
 $dbname = 'mydb';
 
 // データベースへ接続
 $link = mysqli_connect($host, $username, $passwd, $dbname);
 
 if(!$link)
 {
    die('接続失敗です。'.mysqli_error());
 }
 
 // ...MySQLに対するCRUD処理
 
 mysqli_close($link);


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

 <?php
    $host = 'localhost';
    $username = 'root';
    $passwd = 'root';
    $dbname = 'mydb';
 
    // データベースへ接続
    $link = mysqli_connect($host, $username, $passwd, $dbname);
    if(!$link)
    {
       die('接続失敗です。'.mysqli_error());
    }
 
    print('<p>接続に成功しました。</p>');
 
    // ...MySQLに対するCRUD処理
 
    $close_flag = mysqli_close($link);
 
    if($close_flag)
    {
       print('<p>切断に成功しました。</p>');
    }
 ?>



データベースの選択

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

bool mysqli_select_db(mysqli link_identifier, string dbname)

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

mysqli_select_db関数は、接続のデフォルトデータベースを変更する際にのみ使用する。
デフォルトデータベースは、mysqli_connect関数の第4引数でも指定できる。

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

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


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

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

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


 <?php
    $link = mysqli_connect('localhost', 'user', 'pass', 'my_db');
    if(!$link)
    {
       die('接続失敗です。'.mysqli_error());
    }
 
    print('<p>接続に成功しました。</p>');
 
    // 現在のデフォルトデータベース名を返す
    if($result = mysqli_query($link, "SELECT DATABASE()"))
    {
       $row = mysqli_fetch_row($result);
       printf("Default database is %s.\n", $row[0]);
       mysqli_free_result($result);
    }
 
    // データベースをworldに変更する
    $db_selected = mysqli_select_db($link, "world");
    if(!$db_selected)
    {
       die('データベース選択失敗です。'.mysql_error());
    }
 
    print('<p>uriageデータベースを選択しました。</p>');
 
    // ...MySQLに対するCRUD処理
 
    $close_flag = mysqli_close($link);
    if($close_flag)
    {
       print('<p>切断に成功しました。</p>');
    }
 ?>