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経由で未経験者でも取り組める副業案件の受注が可能。実務を通じてスキルを磨き、市場価値の高いエンジニアへの道が開けます。
独学で悩むくらいなら、まずはプログラミングスクールをチェックしてみるのもアリかもしれませんよ!
↓ ↓ こちらをクリック ↓ ↓