【MySQL・php】phpのPDOを使ってMySQLへ接続する方法

php-pdophp
書いてる人
あいりゅー

プログラミングを学びながら更新しています。
iPhone/iPad/Mac/Apple WatchなどのApple製品はこちらで主に更新しています。
麻雀の反省をひたすら掲載してるブログもやってます。

あいりゅーをフォローする

このページについて

このページでは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();
}

これで実際にサーバーを落とした状態で接続を試みるとこうなります。

PDOエラー

ちなみにこれは上でも書いたソケット関連のエラーと同じコードが表示されているんですが、本物のソケットエラーが出ている時はこうなります。

HY000 Fatal error

 

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で作ったフォームからのデータの受け取り方法と、その表示方法の解説です。
タイトルとURLをコピーしました