【コピペOK】PHPでデータベースを扱う7つの方法!

PHPデータベース操作の初心者ガイドPHP
この記事は約9分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればサンプルコードを活用して機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

PHPでデータベースを扱う方法を学びたい初心者の皆さん、この記事があなたのヘルパーとなることでしょう。

ここではPHPとデータベースを組み合わせて使う基本的なテクニックを7つ紹介します。

サンプルコードとともに各手法を一つずつ丁寧に解説し、あなたが自身のプロジェクトでデータベース操作を自信をもって行えるようになることを目指します。

●PHPとデータベースとは

PHPはウェブサーバー上で動作するプログラミング言語で、データベースと連携して動的なウェブページを生成することが得意です。

データベースは大量のデータを効率よく管理するためのシステムで、ユーザーの情報や商品の詳細など、ウェブアプリケーションで扱うさまざまなデータを格納します。

この2つを連携させることで、ウェブサイトの訪問者に対してパーソナライズされたコンテンツを提供したり、ユーザーからの入力をデータベースに保存したりすることが可能になります。

●PHPでデータベースを扱うための準備

○PHPとMySQLのインストール

まずはPHPとMySQLのインストールから始めましょう。

これらは無料で利用可能で、それぞれ公式サイトからダウンロードしてインストールすることができます。

詳しいインストール方法は公式サイトのドキュメンテーションを参照してください。

○PDOの概要

PHPでデータベースを扱うためには、PHP Data Objects(PDO)という拡張モジュールを利用します。

PDOはデータベースへのアクセスを抽象化し、PHPからさまざまな種類のデータベースに対して同じ方法でアクセスすることを可能にします。

また、セキュリティ面でも強力なサポートを提供しており、SQLインジェクション攻撃からアプリケーションを守るためのプリペアドステートメントという機能が備わっています。

次に、具体的なコードとともに、PHPでデータベースを操作する7つの方法を学んでいきましょう。

●PHPでデータベースを扱う7つの方法

○方法1:データベースへの接続

<?php
$dsn = 'mysql:host=localhost;dbname=testdb;charset=utf8';
$user = 'username';
$password = 'password';

try {
    $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}
?>

このコードでは、PDOを使ってMySQLデータベースに接続しています。

この例ではlocalhostに設置されたtestdbという名前のデータベースに接続を試みています。

usernameとpasswordはそれぞれデータベースのユーザー名とパスワードに置き換えてください。

もし接続に失敗した場合は、エラーメッセージが表示されます。

○方法2:データの取得

データベースからデータを取得することは、ウェブアプリケーション開発の中核的な部分です。

PDOを使ったデータの取得方法を紹介します。

<?php
$sql = 'SELECT name, age FROM users WHERE age > 20';
$stmt = $dbh->prepare($sql);
$stmt->execute();

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo $row['name'].', '.$row['age']."\n";
}
?>

このコードでは、データベースからデータを取得しています。

具体的には、usersテーブルから年齢が20歳より上のユーザーの名前と年齢を取得しています。

prepareメソッドでSQLクエリを準備し、executeメソッドでクエリを実行します。

その後、fetchメソッドを使用して結果を一行ずつ取り出しています。

○方法3:データの挿入

データベースへのデータの追加は、ユーザーからの入力を保存する際などに使用します。

下記のコードは、usersテーブルへの新規ユーザーの追加を行っています。

<?php
$sql = 'INSERT INTO users (name, age) VALUES (?, ?)';
$stmt = $dbh->prepare($sql);
$stmt->execute(['John', 25]);
?>

このコードでは、nameとageの値を持つ新しいユーザーをusersテーブルに追加しています。

この例では、名前がJohnで年齢が25歳のユーザーを追加しています。

VALUESの部分の?には、executeメソッドの引数で指定した配列の値が順に代入されます。

○方法4: データの更新

データベース内の既存のデータを更新するには、UPDATEクエリを使用します。

下記のコードは、特定のユーザーの年齢を更新します。

<?php
$sql = 'UPDATE users SET age = ? WHERE name = ?';
$stmt = $dbh->prepare($sql);
$stmt->execute([30, 'John']);
?>

このコードでは、usersテーブルの特定のユーザーの年齢を更新しています。

この例では、名前がJohnのユーザーの年齢を30歳に更新しています。

このように、UPDATEクエリではWHERE句を用いて更新対象を特定します。

○方法5: データの削除

データベースから不要になったデータを削除するには、DELETEクエリを使用します。

特定の条件に一致するデータの削除が可能です。具体的なコードを見てみましょう。

<?php
$sql = 'DELETE FROM users WHERE age > 30';
$stmt = $dbh->prepare($sql);
$stmt->execute();
?>

このコードでは、usersテーブルから30歳よりも年齢が高い全てのユーザーを削除しています。

prepareメソッドでSQLクエリを準備し、executeメソッドでクエリを実行します。

○方法6: エラーハンドリング

PHPとデータベースを操作する際は、エラーが発生する可能性が常にあります。

したがって、エラーハンドリングは重要なスキルとなります。

<?php
try {
    $dbh = new PDO($dsn, $user, $password);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}
?>

このコードでは、PDOでデータベースに接続する際のエラーハンドリングを示しています。

try-catchブロックを使用して、エラーが発生した際にエラーメッセージを出力するようにしています。

○方法7: トランザクションの使用

トランザクションは、複数のクエリを一つの作業単位として扱う方法です。

すべてのクエリが正常に完了した場合のみ変更が確定され、途中でエラーが発生した場合は全ての変更がロールバック(取り消し)されます。

<?php
try {
    $dbh->beginTransaction();
    $dbh->exec("INSERT INTO users (name, age) VALUES ('John', 25)");
    $dbh->exec("UPDATE users SET age = 26 WHERE name = 'John'");
    $dbh->commit();
} catch (Exception $e) {
    $dbh->rollBack();
    echo "Failed: " . $e->getMessage();
}
?>

このコードでは、ユーザーの追加と更新を一つのトランザクションとして扱っています。

beginTransactionメソッドでトランザクションを開始し、commitメソッドでトランザクションを確定します。

途中でエラーが発生した場合は、rollBackメソッドで変更を取り消します。

●各方法の応用例

これまで紹介した7つの方法は、それぞれ独立していますが、現実の開発ではこれらの方法を組み合わせて使用します。

次は、ユーザー情報の取得、更新、削除を行う一連のプロセスを示す応用例です。

<?php
try {
    $dbh = new PDO($dsn, $user, $password);

    // ユーザー情報の取得
    $sql = 'SELECT * FROM users WHERE name = :name';
    $stmt = $dbh->prepare($sql);
    $stmt->execute([':name' => 'John']);
    $user = $stmt->fetch(PDO::FETCH_ASSOC);

    // ユーザー情報の更新
    $sql = 'UPDATE users SET age = :age WHERE name = :name';
    $stmt = $dbh->prepare($sql);
    $stmt->execute([':name' => 'John', ':age' => $user['age'] + 1]);

    // ユーザー情報の削除
    $sql = 'DELETE FROM users WHERE name = :name';
    $stmt = $dbh->prepare($sql);
    $stmt->execute([':name' => 'John']);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}
?>

このコードでは、まず指定したユーザーの情報を取得しています。

次に、そのユーザーの年齢を1つ増やす更新処理を行っています。

最後に、そのユーザーの情報を削除しています。

●データベース操作の注意点と対処法

データベース操作を行う際には、次のような点に注意が必要です。

  1. SQLインジェクション:ユーザーからの入力をそのままクエリに組み込むと、悪意のあるユーザーによってデータベースが不正操作される可能性があります。
    これを防ぐためには、プリペアドステートメントを使用します。
  2. エラーハンドリング:データベース操作はさまざまな理由で失敗する可能性があります。
    例外処理を適切に行い、エラー情報を適切に取得することが重要です。
  3. パフォーマンス:大量のデータを扱う場合、クエリのパフォーマンスがシステム全体のパフォーマンスに大きな影響を及ぼします。
    インデックスの使用やクエリの最適化などを行うことが重要です。

まとめ

PHPでデータベースを操作するための基本的な方法を7つ紹介しました。

これらの方法を理解し、実際の開発に活用してみてください。

また、データベース操作を行う際には、セキュリティやエラーハンドリング、パフォーマンスなどの点に注意が必要であることを覚えておいてください。