このページについて
このページではphpのPDOを使ってMySQLへ接続する方法の解説をしています。
phpでMySQLへ接続
phpでMySQLへ接続してデータを取得するにはPDOを使います。PDOはそれまでデータベースごとに異なる方法で接続していたものを統一しようってことで作られたクラスになります。どんなデータベースを使用していても、このPDO1つで接続・取得する事ができるようになっています。
PDOの使い方
PDOでデータベースへ接続するんですが、その前にいくつか準備する必要があります。
- データベースの名前
- ログインユーザー
- ログインパスワード
の3種です。基本的にはこれとPDOを使うだけで接続・取得まで行えます。基本的な構文は以下の通りです。データベースの名前・ユーザー・パスワードはそれぞれの環境に応じて変化させてください。
$dbname = 'mysql:host=localhost;dbname=データベースの名前';
$user = ログインユーザー;
$pass = ログインパスワード;
$db = new PDO($dbname, $user, $pass);
これでひとまずは接続して取得まで行えます。しかしエラーが発生することもあるんですが主にMAMPとかで行う場合にエラーが出ることもあります。
HY000 2002エラー
自分はMAMPのローカルサーバー+CodeRunnerで色々とやっている最中でこのエラーに遭遇しました。これはunix_socketがないから接続エラーが出てますよてきなエラーなので以下を使うことで解消できます。
$dbname = 'mysql:host=localhost;dbname=接続データベース名;charset=utf8;unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock';
$db = new PDO($dbname, $user, $pass);
データベースの名前の後半にcharset以降を付与するだけでOKです。これでソケットが用意出来るのでMAMPのローカルサーバーへの接続が可能になります。
エラー処理
上記のHY000 2002エラーではなく、シンプルに接続エラーとかになった場合の処理を書いておくといいってのはいろんなところで書かれています。その時に使われるのがtry文と呼ばれるものです。
これは例外が発生した場合にさせる処理を書いたものをいいます。普通に変数に値などを入れて処理させる場合など、最初から処理内容などが決まりきっている場合は不要です。
何らかの影響でサーバーが一時的にダウンしているとか、そういう時にサーバーを呼び出してもエラーとなりますよね?そういう時のためにtryを使ってエラー発生時の例外用処理を書いておきましょうってことです。
基本的にはtryに通常の処理を、catchに例外が発生した時用の処理を書きます。
try {
$dbh = PDO('mysql:host=localhost;dbname=test', $user,$pass);
}
catch {PDOExeption $e) {
print 'エラー'.$e->getMessage().'<br>';
die();
}
これで実際にサーバーを落とした状態で接続を試みるとこうなります。
ちなみにこれは上でも書いたソケット関連のエラーと同じコードが表示されているんですが、本物のソケットエラーが出ている時はこうなります。
Fatal error(致命的なエラー)という表示が出ている通り、catchでメッセージを表示しているときとは違って本当にあかんエラーやでって出てます。これが大きな違いですね。是非ともtry/catchを使いましょう。
接続を終了する
データベースへの接続があるなら当然ですが終了もあります。これは簡単で、PDOのインスタンスに対してnullを代入することで破棄できます。今回の例だと$dbhという変数に対してPDOを使ってインスタンスを生成していますが、最後は$dbh=null;とするだけでOKです。
ただし持続的な接続をしてデータベースとやりとりするようなwebアプリを作成する場合、PDO::ATTR_PERSISTENTを使ってスクリプトが終了しても接続は維持するものを使ったりしたほうが恩恵を受けられるかもしれません。
まとめ
phpでデータベースへ接続するにはPDOを使えばデータベースがどのソフトであろうと接続が可能です。mysqlで接続する例を挙げましたが、基本的にはdb名とユーザー・パスワードを入力すれば接続できます。
途中でエラーが発生した場合はそれぞれ対処する必要がありますが、基本はtry/catchを使っておくといいかもしれませんね。
取得したデータを使う方法はこちらを参照してください。
- phpの基礎
- phpとは?JavaScriptとの違いは?みたいなことから、基本の書き方などを解説。
- echoとprint
- 画面に文字を出力する2種類の言語構造の使い方
- 変数
- phpで使える変数の扱い方などを解説しています。
- 変数のスコープ(有効範囲)
- 変数のスコープについての解説です。
- var_dump
- 変数の情報を見ることができる関数
- print_r
- 変数の情報をわかりやすい形式で表示する関数
- 配列と連想配列
- 配列と連想配列の書き方と、便利な関数の解説など。
- key
- 連想配列のキーを返してくれます。内部ポインタ関係あり。
- count
- 配列や連想配列の要素数を数えてくれる関数の使い方解説。
- ソート関数
- 配列に対してソートを行う関数の中から、代表的な5つの使い方解説です。
- array_reverse
- 配列の中身の順番を反転させる関数です。
- array_chunk
- 配列を指定した数で分割させるarray_chunk関数の使い方解説です。
- array_combine
- 2つの配列を足して1つの連想配列にする関数です。
- array_diff
- 2つの配列を比較して、存在しない値を出力する関数
- array_push
- 配列に対して後方に要素を追加する関数
- array_unshift
- 配列に対して先頭に要素を追加する関数。
- array_shift
- 配列の先頭の要素を取り出す関数。
- array_merge
- 複数の配列を統合して1次元の配列にする関数
- array_intersect
- 2つの配列を比較して、両方に共通するものを出力する関数
- include
- includeを使って別のphpファイルを読み込む方法の解説。
- if文
- if文を使って処理を変更させる方法の解説。
- switch文
- switch文を使って複数の処理分岐を行わせたい時に使います。
- forループ
- forループを使って同じ処理を行わせる方法の解説です。
- whileループ
- whileループを使って同じ処理を行わせる方法の解説と注意点。
- do-whileループ
- do-whileループを使って同じ処理を行わせる方法の解説です。
- foreachループ
- foreachループを使って配列内のアイテム全てに処理を行う方法の解説です。
- continue
- ループ処理の残りをスキップしつつ、ループの先頭に戻る制御構造
- ループのネスト構造(入れ子)
- ループの中にループを入れる書き方や考え方の解説。
- function
- functionを使って自作の関数を作成・使用する方法の解説。
- 引数の種類と書き方解説
- functionで扱う引数の種類と書き方を解説
- return
- returnの使い方と関数での使い方解説。
- class
- classを作成して変数と関数を1つにまとめる方法と使い方の解説。
- constructとdestruct
- classのインスタンス作成と同時に処理を行うconstructと、スクリプトの終了と同時に実行するdestructの解説です。
- インターフェイス
- インターフェイスという用語の解説と、実際の使い方解説
- トレイト
- コードを再利用するのに便利なトレイトの解説です。
- 列挙型
- プログラム中で使う変数名をあらかじめ定義しておく。そんな感じの型。
- PDOを使ってMySQLへ接続
- PDOを使ってMySQLへ接続し、データを取得する方法の解説です。
- データの加工と表示
- PDOでデータベースから取得したデータを加工して表示する方法の解説です。
- HTMLフォームのデータ受け取りと表示
- HTMLで作ったフォームからのデータの受け取り方法と、その表示方法の解説です。