PHPでMySQLに接続する方法・手順

仕事で久しぶりにデータベースを利用する必要があったのですが、いろいろ忘れてたので備忘録を残そうと思います。

 

普段はプロジェクトマネージャー、またはディレクターでお仕事してるので、プログラムを開発することもないのですが、ちょうどかかわっている案件が落ち着いたのでひょんなことからエンジニア作業を手伝うことになりました。

 

僕自身、そのエンジニアには何度も助けてもらったので、「困ったときはお互い様」の精神で引き受けたのですが、いやー、これがまた大変でした。。。

 

何が大変て、そりゃもう

 

完全に忘れてる。。。。

 

わけですよ。ヤバイくらいに。

 

普通にPHPでちょっとしたプログラムを書くくらいなら問題ないのですが、データベースは完全に忘れてましたね。

そんなわけでまずは、PHPを使ってMySQLの接続についてメモを残します。(そこからかよっ)

 

PHPでMySQLへ接続する

まず、前提として、以下の準備が整っている前提で話を進めます。

  • php.iniの設定(php_mysql.dllで、extension=php_mysql.dllを使えるようにする)
  • libmysql.dllがある
  • データベース、テーブルが用意されている

 

余裕ができたら、上記についても記事を書いてみようと思います。

 

phpでMySQLへ接続するには、「mysql_connect」を利用します。

 

mysql_connect('MySQLサーバ名', 'ユーザ名', 'パスワード');

 

これを書けばつながります。

ただ、これだけだと、つながらなかったときに困るので、mysql_error()を使ってエラーのときにエラー文を表示させます。

 

$link = mysql_connect('MySQLサーバ名', 'ユーザ名', 'パスワード');
if (!$link) {
    print(mysql_error());
}

 

さらに、MySQLにつながらない(=その後の処理ができない)場合は、つながらなかった時点で後続の処理をとめてしまったほうがよいです。

 

$link = mysql_connect('MySQLサーバ名', 'ユーザ名', 'パスワード');
if (!$link) {
    die('接続失敗です。'.mysql_error());
}

 

以上でデータベースへの接続は完了です。

 

これで終わったら寂しい記事になってしまうので、テーブルに入っているカラムの値を取得するところも書いちゃおうと思います。

 

PHPでテーブルのカラムの値を参照する

MySQLに接続した後に、取得したいカラムがあるテーブルのデータベースを指定します。

 

$db_selected = mysql_select_db('テーブル名', 'mysql_connect で接続した MySQL への接続リソース');

 

こちらも、エラーになったときのことを考えて、

 

$db_selected = mysql_select_db('テーブル名', 'mysql_connect で接続した MySQL への接続リソース');
if (!$db_selected){
    die('データベース選択失敗です。'.mysql_error());
}

 

続いて、テーブルから値を取得します。

 

データベースへクエリー(※)を発行する関数として「mysql_query」があるのでこちらを使います。

※クエリとは、DBに問い合わせるためのコマンドのことです。Oracleなど利用するデータベースごとに違います。

 

$result = mysql_query('SELECT 'カラム名1' , 'カラム名2' FROM テーブル名');

 

こちらもエラーのことを考えて

 

$result = mysql_query('SELECT * FROM テーブル名');
if (!$result) {
    die('クエリーが失敗しました。'.mysql_error());
}

 

これで、$resultを表示させればいいと思えますが違います。

このクエリの実行結果はresource型というデータで格納されており、これはmysql_fetch_assocというPHPの関数を使うことで取得できます。

 

$row = mysql_fetch_assoc($result);
print($row['カラム名1']);
print($row['カラム名2']);

 

こんな感じです。

 

最後に、MySQLとつなぎっぱなしにしてると、リソース的にも、セキュリティ的によくないので切断します。

 

mysql_close($link);

 

これもエラーを考えて、

 

$close_flag = mysql_close($link);
if ($close_flag){
    print "切断に成功しました。";
}

 

とします。

上記、一連の流れのまとめると、

 

<?php
    $link = mysql_connect('MySQLサーバ名', 'ユーザ名', 'パスワード');
    if (!$link) {
        die('接続失敗です。'.mysql_error());
    }
    print "接続に成功しました。";

    $db_selected = mysql_select_db('テーブル名', 'mysql_connect で接続した MySQL への接続リソース');
    if (!$db_selected){
        die("データベース選択失敗です。".mysql_error());
    }
    print "uriageデータベースを選択しました。";

    $result = mysql_query('SELECT 'カラム名1' , 'カラム名2' FROM テーブル名');
    if (!$result) {
        die('クエリーが失敗しました。'.mysql_error());
    }

    $row = mysql_fetch_assoc($result);
    print($row['カラム名1']);
    print($row['カラム名2']);

    $close_flag = mysql_close($link);

    if ($close_flag){
        print "切断に成功しました。";
    }
?>

 

となります。

もし、表示が文字化けするようなら、データベースの文字コードがあってない可能性があるので、

 

mysql_set_charset("文字コード");

 

をデータベース選択後に記述すると解消します。

 

うーん、かなり忘れてましたね。。。

 

まぁ最初に思い出すのをかねて、上記の処理を書きまししたが、データベース接続する箇所が多いプログラムは接続から値取得までのところは関数を作って使いまわせるようにしておくのがよいですね。

そうしないと、ステップ数増えるし、ソース汚いしでいいことありません。

 

そういえば、SI屋でプログラマーをやってた頃は、日報にステップ数を書いて報告してたことがあったのを思い出しました。

ステップ数が多ければ多いほど評価された時代ですね。

 

昨今はステップ数が多いと、逆に生産性が悪いと思われるんじゃないだろうか???

 

Author:yukio iizuka
プロフィール画像
フリーランスとしてUX視点で業務支援しています。 HCD-Net認定 人間中心設計専門家 LEGO®︎ SERIOUS PLAY®︎ メソッドと教材活用トレーニング修了認定ファシリテーター Hi-Standard好きです。
http://yukioiizuka.com
mislead
MISLEADの記事に共感いただけましたら
いいねをお願いします。

コメント一覧

  • 通りすがり

    mysql_connect系関数は非推奨になり、PHP7で削除されました。
    Mysqli::connectなどを使うべきです。

    ソース
    http://php.net/manual/ja/function.mysql-connect.php

    • mislead

      ありがとうございます。
      次回以降、参考にさせていただきます。

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください



       

© yukio iizuka All Rights Reserved...