第6章: PHPのデータベース操作

PHPを使用してデータベースにアクセスし、データを管理するための基本的な技術を学びます。データベース操作は、Webアプリケーションにおいてユーザー情報や商品のリストなどの管理に不可欠です。この章ではSQLの基本文法とMySQLの使い方、PHPのPDO(PHP Data Objects)を活用した安全なデータ操作方法、さらにはクエリビルダーを使って複雑なクエリを作成する方法について解説します。


6.1 SQLとMySQLの基礎

SQL文の基本構文

SQL(Structured Query Language)は、データベースのデータを操作するための標準言語です。SQLを使ってデータの追加、取得、更新、削除(いわゆるCRUD操作)を行います。ここでは、基本的なSQLの構文を紹介します。

1. SELECT文

テーブルからデータを取得するための文です。

SELECT カラム名1, カラム名2 FROM テーブル名;

例: usersテーブルから全てのデータを取得する場合、

SELECT * FROM users;
2. INSERT文

テーブルにデータを追加するための文です。

INSERT INTO テーブル名 (カラム名1, カラム名2) VALUES (値1, 値2);

例: usersテーブルに新しいユーザーを追加する場合、

INSERT INTO users (username, email) VALUES ('example_user', 'user@example.com');
3. UPDATE文

既存のデータを更新するための文です。

UPDATE テーブル名 SET カラム名1 = 新しい値1 WHERE 条件;

例: usersテーブルで特定のユーザーのメールアドレスを更新する場合、

UPDATE users SET email = 'new_email@example.com' WHERE username = 'example_user';
4. DELETE文

データを削除するための文です。

DELETE FROM テーブル名 WHERE 条件;

例: usersテーブルから特定のユーザーを削除する場合、

DELETE FROM users WHERE username = 'example_user';

MySQLとの接続方法とデータベース操作

MySQLは、PHPと相性が良く、多くのWebアプリケーションで利用されているデータベース管理システムです。PHPでは、mysqli関数またはPDOを使用してMySQLデータベースに接続し、操作を行います。ここでは、mysqliを用いたMySQLへの接続方法とデータ操作を見ていきます。

データベース接続

次のコードは、PHPを使用してMySQLに接続する方法を示しています。

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "sample_db";

// 接続の確立
$conn = new mysqli($servername, $username, $password, $dbname);

// 接続確認
if ($conn->connect_error) {
die("接続失敗: " . $conn->connect_error);
}
echo "接続成功";

mysqliを使用したデータ操作

次に、mysqliを使ってデータを挿入、取得、更新、削除する方法を示します。

データの挿入
$sql = "INSERT INTO users (username, email) VALUES ('new_user', 'new_user@example.com')";

if ($conn->query($sql) === TRUE) {
echo "新しいレコードが追加されました";
} else {
echo "エラー: " . $sql . "<br>" . $conn->error;
}
データの取得
$sql = "SELECT id, username, email FROM users";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - 名前: " . $row["username"]. " - メール: " . $row["email"]. "<br>";
}
} else {
echo "データが見つかりません";
}
データの更新
$sql = "UPDATE users SET email='updated_email@example.com' WHERE username='new_user'";

if ($conn->query($sql) === TRUE) {
echo "レコードが更新されました";
} else {
echo "エラー: " . $conn->error;
}
データの削除
$sql = "DELETE FROM users WHERE username='new_user'";

if ($conn->query($sql) === TRUE) {
echo "レコードが削除されました";
} else {
echo "エラー: " . $conn->error;
}

6.2 PDOを使った安全なデータ操作

PDO(PHP Data Objects)は、データベース接続と操作を抽象化したオブジェクト指向のインターフェースであり、安全で効率的なデータベース操作を可能にします。PDOを使用すると、MySQLだけでなく、他のデータベースシステムにも対応しやすくなります。ここではPDOの基本的な設定方法と、セキュリティを考慮したデータ操作方法を学びます。

PDOの設定と活用

まず、PDOを使ってMySQLに接続します。

$dsn = "mysql:host=localhost;dbname=sample_db";
$username = "root";
$password = "";

try {
$pdo = new PDO($dsn, $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "接続成功";
} catch (PDOException $e) {
echo "接続エラー: " . $e->getMessage();
}

プレースホルダーとエスケープでセキュリティ向上

PDOを使用すると、プレースホルダーを使ってデータをバインドでき、SQLインジェクションのリスクを低減できます。

データの挿入(プレースホルダーを使用)
$sql = "INSERT INTO users (username, email) VALUES (:username, :email)";
$stmt = $pdo->prepare($sql);

$username = "safe_user";
$email = "safe_user@example.com";

$stmt->bindParam(':username', $username);
$stmt->bindParam(':email', $email);
$stmt->execute();

echo "新しいユーザーが追加されました";
データの取得(プレースホルダーを使用)
$sql = "SELECT id, username, email FROM users WHERE username = :username";
$stmt = $pdo->prepare($sql);

$username = "safe_user";
$stmt->bindParam(':username', $username);
$stmt->execute();

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

foreach ($results as $row) {
echo "ID: " . $row["id"] . " - 名前: " . $row["username"] . " - メール: " . $row["email"] . "<br>";
}

6.3 クエリビルダーの応用

PHPでは、Laravelなどのフレームワークを用いることで、クエリビルダーと呼ばれるツールを使ってクエリの作成や管理が可能です。これにより、クエリが複雑であってもシンプルかつ読みやすく、柔軟なコードを書くことができます。

複雑なクエリの作成と管理

クエリビルダーは、簡潔な文法で条件やソートなどの複雑なクエリを構築するのに役立ちます。例として、ユーザーの情報をフィルタリングし、条件に応じてデータを取得する例を示します。

use Illuminate\Support\Facades\DB;

$users = DB::table('users')
->where('age', '>', 20)
->where('status', '=', 'active')
->orderBy('created_at', 'desc')
->get();

foreach ($users as $user) {
echo "ID: " . $user->id . " - 名前: " . $user->username . " - 年齢: " . $user->age . "<br>";
}

データベース操作の最適化

クエリビルダーを使うことで、コードの見通しを良くし、またデータベースアクセスを最適化することができます。以下に、複雑な集計処理やパフォーマンス向上のためのキャッシュ機能の利用例を示します。

集計処理の例
$totalUsers = DB::table('users')->count();
$averageAge = DB::table('users')->avg('age');

echo "ユーザー数: " . $totalUsers;
echo "平均年齢: " . $averageAge;
キャッシュの使用例

クエリ結果をキャッシュし、頻繁にアクセスするデータのパフォーマンスを向上させることができます。

use Illuminate\Support\Facades\Cache;

$users = Cache::remember('active_users', 60, function () {
return DB::table('users')->where('status', 'active')->get();
});

foreach ($users as $user) {
echo "ID: " . $user->id . " - 名前: " . $user->username . "<br>";
}

この章を通して、SQLとMySQLの基礎、PDOを使ったセキュアなデータベース操作、さらにクエリビルダーを利用した効率的なデータ操作を習得できるようになります。


初心者におすすめ!プログラミングスクールのススメ

未経験でも気軽に!サブスク型プログラミングスクール【Freeks】

プログラミングを始めたいと思っているそこのあなた、独学よりもプログラミングスクールが断然おすすめです!理由は簡単、続けやすさです。

独学の挫折率、驚きの87.5%!

独学でプログラミングを続けるのは、実はかなりハードルが高いんです。データによると、なんと87.5%もの学習者が途中で挫折しているとか。一方、各プログラミングスクールが公表しているデータによると、受講生の約95%が最後までやり抜いているとのこと。数字を見れば一目瞭然、プログラミングスクールの方が圧倒的に続けやすいんです。

有料と無料、スクールの違いは?

プログラミングスクールには有料と無料のタイプがありますが、その違いは次の通りです:

  • 受講条件が異なる
  • 学べるスキルやカリキュラム内容が異なる
  • 就職や転職のサポート内容が異なる

どちらが自分に合っているか、よく考えて選ぶのが大事です。

サブスク型プログラミングスクール『FREEKS(フリークス)』に注目!

プログラミング初心者でも学びやすいと評判の『FREEKS』、その特徴は以下の通り:

  • 未経験者向けのわかりやすいカリキュラム
  • 経験豊富なエンジニアのサポート
  • オンラインで自分のペースで学習可能

なんと、月会費のみで全カリキュラムが受け放題!Java、PHP、HTML/CSS、JavaScriptなど、多彩なプログラミング言語が学べるんです。しかも、AIが質問に自動で答えてくれるシステムも導入済み。

終了後は副業もサポート!

カリキュラムを終了した後には、Freeks経由で未経験者でも取り組める副業案件の受注が可能。実務を通じてスキルを磨き、市場価値の高いエンジニアへの道が開けます。

独学で悩むくらいなら、まずはプログラミングスクールをチェックしてみるのもアリかもしれませんよ!
 ↓ ↓ こちらをクリック ↓ ↓ 

Related Post

第2章: PHPの基本文法第2章: PHPの基本文法

PHPの基本的な構文や使い方を理解するために、変数、データ型、演算子、条件分岐、ループ処理について詳しく解説していきます。プログラミングの基礎を固めるために重要な内容が含まれていますので、丁寧に学んでいきましょう。 2. […]