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屋でプログラマーをやってた頃は、日報にステップ数を書いて報告してたことがあったのを思い出しました。
ステップ数が多ければ多いほど評価された時代ですね。
昨今はステップ数が多いと、逆に生産性が悪いと思われるんじゃないだろうか???
コメント一覧
mysql_connect系関数は非推奨になり、PHP7で削除されました。
Mysqli::connectなどを使うべきです。
ソース
http://php.net/manual/ja/function.mysql-connect.php
ありがとうございます。
次回以降、参考にさせていただきます。