プログラミング初心者にオススメ

PHPのDB操作は”PDO”を使用する!

どうも。みずかず(@mizukazu_1)です。

今回はPHPでPDOを使用してDB操作を行う方法をご紹介していきます。

現在ではこのPDOというものを使用してDBを操作するのが主流になっています。
以前まで使われていたmysql関数などは非推奨になっているので注意しましょう。

それでは紹介していきます!

PDOとは

PHP Data Objects (PDO) 拡張モジュールは、 PHP の中からデータベースにアクセスするための軽量で高性能な インターフェイスを定義します。

引用元:https://www.php.net/manual/ja/intro.pdo.php

公式から引用してきました。

PHPでDBにアクセスするためのインターフェイスって事ですね。
しかも軽量かつ高性能です。

さらに、どのDBでも共通で使う事が出来るというメリットもあります。

PDOインストール

5.1.0以降のバージョンのPHPであればデフォルトでPDOドライバが有効になっているので
何も気にしなくても使用する事が出来ます。

5.1.0以前のバージョンでは別途PDOドライバをインストールする必要があります。

今回の記事ではPDOドライバインストール手順については割愛します。

PDOを使用してDBへ接続

さっそく使用方法の説明に入っていきます。

PDOオブジェクトの作成

まずPDOオブジェクトを作成します。

test.php

$pdo = new PDO('mysql:host=localhost;dbname=database', 'user', 'password');

第一引数にdsnと呼ばれるDB接続用の情報を設定します。

  • DBのアドレス
  • DB名

第二引数にユーザー名、第三引数にパスワードを設定します。

DBへ接続

test.php

try {
    $pdo = new PDO('mysql:host=localhost;dbname=database', 'user', 'password');
    echo "接続成功";
} catch (PDOException $e) {
    echo "接続失敗: " . $e->getMessage();
    exit();
}

PDOオブジェクト作成時にDBへの接続が行われるので上記のようにtry catchを使用して
接続出来たかどうかの確認を行う事が出来ます。

データの取得(SELECT)

1件取得

test.php

$stmt = $pdo->query(SELECT カラム FROM テーブル名);
$row = $stmt->fetch(PDO::FETCH_ASSOC);

上記の書き方でデータを1件取得する事が出来ます。

全件取得

test.php

$stmt = $pdo->query(SELECT カラム FROM テーブル名);

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

fetch関数をfetchAll関数にするとデータを全件取得する事が出来ます。

データの挿入(INSERT)

データの挿入にはプリペアドステートメントという機能を使用します。

どういうものかというと、先にSQLの型のようなものを作成しておいて後から値を入れてSQLを実行するというものです。
いまいち分かりにくいと思うのですが使っているうちに慣れると思います。

また、メリットとして挿入する値を文字列にすることが出来るのでSQLインジェクションの防止にもなります。

test.php

  $stmt = $pdo->prepare("INSERT INTO テーブル名 (id, name, age) VALUES (:id, :name, :age)");
  $stmt->bindParam(':id', $id, PDO::PARAM_STR);
  $stmt->bindParam(':name', $name, PDO::PARAM_STR);
  $stmt->bindValue(':age', $age, PDO::PARAM_STR);

  $id = '1';
  $name = 'Mizukazu';
  $age = '24';

  $stmt->execute();

こんな感じです。
prepare関数を使用して先に型だけ作っておいて、後から変数を使って値を入れていますよね。
これがプリペアドステートメントです。

値の変更も容易に出来るのですごい便利です。

bindParam関数とbindValue関数の違い

bindParam関数は値をセットする時に変数を入れないとエラーになります。
対して、bindValue関数は変数でも直接値でもどちらでもOKといった違いがあります。

また、第二引数ですが値が文字列の場合はPDO::PARAM_STR、数値の時はPDO::PARAM_INTを使用します。

データの更新(UPDATE)

test.php

  $stmt = $pdo -> prepare("UPDATE テーブル名 SET name =:name WHERE id = :value");
  $stmt->bindParam(':name', $name, PDO::PARAM_STR);
  $stmt->bindValue(':value', '1', PDO::PARAM_STR);

  $name = 'Mizukazu';

  $stmt->execute();

データの更新に関しても挿入とほとんど同じです。

プリペアドステートメント機能を使用して型を作り、値を入れてSQLを実行するといった感じです。

データの削除(DELETE)

test.php

  $id = '1';
  $stmt = $pdo -> prepare("DELETE FROM テーブル名 WHERE id = :id");
  $stmt -> bindValue(':id', $id, PDO::PARAM_STR);
  $stmt -> execute();

データの削除も同じですね。

まとめ

いかがだったでしょうか。
PDOの使い方自体はそんなに難しくないと思います。

ただプリペアドステートメント機能が少し分かりにくいくらいですかね。
僕自身もまだまだ勉強中なのでとても偉そうなことは言えないですが。。。笑

SQLの型を作る⇒型に値を入れる⇒SQLを実行する

この3つの手順を覚えればサクッと使えるのでぜひ忘れないようにしてください!

参考にしたサイト

Qiita

PHPでPDOを使ってMySQLに接続、INSERT、UPDATE、DELETE、COUNT、SUM

bindParam()とbindValue()の違い

PDOでMySQLに接続し、fetch(PDO::FETCH_ASSOC)を使って、すべての行を取り出し表示する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です