第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経由で未経験者でも取り組める副業案件の受注が可能。実務を通じてスキルを磨き、市場価値の高いエンジニアへの道が開けます。

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

p-school

Recent Posts

第5章: PHPのオブジェクト指向プログラミング(OOP)

オブジェクト指向プログラミング…

2週間 ago

第4章: PHPの関数

プログラミングにおいて、関数は…

2週間 ago

第3章: PHPの配列とコレクション

PHPでの配列とコレクションの…

2週間 ago

第2章: PHPの基本文法

PHPの基本的な構文や使い方を…

2週間 ago