PHP初心者向け完全ガイド|PDOでMySQL接続・実務レベルの基礎を旅行中プログラマが解説
旅先のカフェでMacを開いてコードを書く。
バックパックの中には最低限の荷物だけ。
でも、サーバーエラーだけは最低限じゃ済まされない。
PHPは「古い」と言われることもありますが、実際の現場では今でも圧倒的に使われています。
WordPress、Laravel、ECサイト、業務システム。世界中のWebの裏側で普通に動いています。
そしてPHPを学び始めると、かなり高確率でぶつかるのがこれ。
- DB接続ができない
- SQLエラーで画面が真っ白
- プリペアドステートメントって何?
- PDOとmysqliの違いが分からない
- XSS?SQLインジェクション?怖そう
この記事では、PHPの基本構文からMySQL接続、実務で本当に重要な「お作法」までを、現場視点でまとめます。
PHPとは?なぜ今でも現場で使われるのか
PHPはWeb開発に特化したサーバーサイド言語です。
ブラウザで見える画面の裏側で、
- データベース接続
- ログイン処理
- 会員登録
- 記事投稿
- 決済処理
などを担当しています。
特にWordPress系案件では今でもPHPスキルの需要がかなり高いです。
PHPの基本構文をまず押さえる
PHPタグ
まずは最小構成。
<?php
echo "Hello, World!";
最初は「echo地獄」になります。
でも全員そこから始まります。
変数
$name = "Suzuki";
$age = 30;
$isActive = true;
- 変数は
$から始まる - PHPは動的型付け
- 型宣言は後からでもOK
JavaやC系から来ると最初はかなり自由に感じます。
定数
define("APP_NAME", "SampleApp");
const VERSION = "1.0";
設定値や固定値には定数を使うのが定番です。
配列
// インデックス配列
$colors = ["red", "blue"];
// 連想配列
$user = [
"name" => "Suzuki",
"age" => 30
];
PHPは配列が超重要。
実務ではJSONレスポンスやDB取得データを大量に扱います。
条件分岐
if ($age >= 20) {
echo "adult";
} elseif ($age >= 13) {
echo "teen";
} else {
echo "child";
}
ログイン制御や権限管理でも頻繁に使います。
ループ処理
// for
for ($i = 0; $i < 5; $i++) {
echo $i;
}
// foreach
foreach ($user as $key => $value) {
echo "$key: $value";
}
特に foreach は現場で毎日見るレベルで使います。
関数
function add(int $a, int $b): int {
return $a + $b;
}
最近のPHPは型宣言もかなり強くなっています。
クラス
class User {
public string $name;
public function __construct(string $name) {
$this->name = $name;
}
public function greet(): string {
return "Hello " . $this->name;
}
}
Laravelなどのフレームワークに進むならクラス理解は必須です。
PHPでファイル分割する理由
コードを1ファイルに全部書くと、数日後には自分でも読めなくなります。
require "config.php";
include "util.php";
require→ 必須ファイルinclude→ 任意ファイル
現場では設定ファイル、DB接続、共通関数などを分離します。
PDOでMySQL接続する方法【超重要】
PHP学習で最重要ポイントの一つ。
昔はmysqliも使われていましたが、今ならPDOが基本です。
PDO接続サンプル
$dsn = "mysql:host=localhost;dbname=test_db;charset=utf8mb4";
$user = "dbuser";
$password = "password";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];
$pdo = new PDO($dsn, $user, $password, $options);
ここが実務で重要
ERRMODE_EXCEPTIONは必須級utf8mb4を使うFETCH_ASSOCで扱いやすくする
旅先で深夜にDBエラーを追うと、この設定のありがたみが分かります。
SELECT文でデータ取得
$stmt = $pdo->query("SELECT * FROM users");
$rows = $stmt->fetchAll();
foreach ($rows as $row) {
echo $row['name'];
}
データベースから一覧取得する基本形です。
プリペアドステートメントは絶対覚える
これは本当に重要。
SQLインジェクション対策の基本になります。
$stmt = $pdo->prepare(
"SELECT * FROM users WHERE id = :id"
);
$stmt->execute([
'id' => 1
]);
$user = $stmt->fetch();
なぜ必要?
もし直接SQL文字列を組み立てると危険です。
$sql = "SELECT * FROM users WHERE id = $id";
これ、実は攻撃される可能性があります。
現場では「プリペアド使ってないSQL」はかなり嫌がられます。
INSERT・UPDATE・DELETEの基本
INSERT
$stmt = $pdo->prepare(
"INSERT INTO users (name, email)
VALUES (:name, :email)"
);
$stmt->execute([
'name' => 'Suzuki',
'email' => 'test@example.com'
]);
UPDATE
$stmt = $pdo->prepare(
"UPDATE users
SET name = :name
WHERE id = :id"
);
$stmt->execute([
'name' => 'Tanaka',
'id' => 1
]);
DELETE
$stmt = $pdo->prepare(
"DELETE FROM users WHERE id = :id"
);
$stmt->execute([
'id' => 1
]);
CRUD(Create・Read・Update・Delete)は毎日使います。
トランザクションを理解すると一気に実務感が出る
例えば銀行送金。
- A口座から減額
- B口座へ加算
片方だけ成功したら大事故です。
そこで使うのがトランザクション。
try {
$pdo->beginTransaction();
$pdo->exec(
"INSERT INTO users (name) VALUES ('A')"
);
$pdo->exec(
"INSERT INTO users (name) VALUES ('B')"
);
$pdo->commit();
} catch (Exception $e) {
$pdo->rollBack();
echo "失敗:" . $e->getMessage();
}
実務ではかなり重要です。
現場でよく見るPHPのお作法
SQLとロジックを分離する
ControllerにSQLを直書きすると地獄化します。
- SQL → Repository層
- 画面制御 → Controller
役割分離が重要です。
DB接続を共通化する
// db.php
function getPDO(): PDO {
static $pdo = null;
if ($pdo === null) {
$pdo = new PDO(...);
}
return $pdo;
}
複数回接続を防げます。
.envで環境変数管理
接続情報をGitHubに上げる事故、初心者時代にやりがちです。
$dsn = $_ENV['DB_DSN'];
本番環境では必須レベル。
XSS対策
echo htmlspecialchars(
$user['name'],
ENT_QUOTES,
'UTF-8'
);
ユーザー入力は信用しない。
これ、Web開発の鉄則です。
例外ベースで統一
- try-catchで統一
- 戻り値でエラー判定しない
コードの見通しがかなり良くなります。
strict_typesを使う
declare(strict_types=1);
型バグを減らせます。
PHP8系では特に重要。
PHP初心者がハマりやすいポイント
- 文字コード問題
- SQLインジェクション
- NULLエラー
- requireパス問題
- 本番だけ動かない問題
これ、本当にあるあるです。
海外の安宿Wi-Fiでサーバー確認してる時に限って発生します。
実務ベースのPHPチェックリスト
- ✅ PDOを使う
- ✅ プリペアドステートメント必須
- ✅ 例外モードON
- ✅ DB接続共通化
- ✅ トランザクション使用
- ✅ htmlspecialcharsでXSS対策
- ✅ .envで接続情報管理
- ✅ strict_typesを使う
まとめ|PHPは「基礎」が強い人ほど伸びる
派手なフレームワークを触る前に、
- PDO
- プリペアドステートメント
- 例外処理
- XSS対策
- トランザクション
この辺りを理解しておくと、後で本当に楽になります。
Laravelを学ぶ時も、 「なぜその書き方なのか」が理解できるようになります。
旅先でコードを書く時も、
結局最後に助けてくれるのは基礎力です。
PHPは地味に見えるけど、現場ではかなり強い。
そして、ちゃんと学ぶと想像以上に奥が深い言語です。








0 件のコメント:
コメントを投稿