カテゴリ: PHP 更新日: 2026/01/15

PHP の MySQL にデータを挿入する方法(INSERT 文の実行)を完全解説!初心者向けガイド

PHP の MySQL にデータを挿入する方法(INSERT 文の実行)
PHP の MySQL にデータを挿入する方法(INSERT 文の実行)

新人と先輩の会話形式で理解しよう

新人

「PHPでMySQLにデータを挿入する方法を知りたいです。どうやってINSERT文を使うんですか?」

先輩

「INSERT文を使えば、データベースに新しいデータを追加できます。PHPでMySQLに接続し、SQL文を実行する方法を学べば、簡単にデータを挿入できますよ。」

新人

「具体的にどのように書けばいいんでしょうか?」

先輩

「まずは、MySQLの基本から説明しますね!」

-

1. MySQLとは?(基本的な説明)

1. MySQLとは?(基本的な説明)
1. MySQLとは?(基本的な説明)

MySQL(マイエスキューエル)は、世界中のWebサイトや業務システムで使われている代表的なデータベース管理システム(DBMS)です。アプリの中で使う大事な情報を、なくさないように整理して保管する「データの倉庫」のような役割を持っています。

データベースに保存した情報は、「あとで探す」「条件に合うものだけ取り出す」「内容を書き換える」「不要なものを消す」といった操作が簡単にできます。そのため、PHPで作る会員登録機能やログイン機能、ブログ記事の一覧表示やコメント機能など、さまざまな場面でMySQLのデータベースが使われます。

MySQLの主な特徴

  • 無料で利用できるオープンソースのデータベースで、個人開発から企業システムまで幅広く利用されている
  • 大量のデータでも高速に検索・更新できるため、アクセスの多いWebサイトでも安定して動作しやすい
  • PHPと組み合わせて使われることが多く、「PHP × MySQL」でWebアプリを作る入門パターンとして定番
  • SQL(エスキューエル)という専用の言語を使って、データの追加(INSERT)、更新(UPDATE)、削除(DELETE)、取得(SELECT)などを行える

テーブルとレコードのイメージ

MySQLの中では、データは「テーブル」という表形式で管理されます。Excelの表をイメージすると分かりやすく、横1行が1件分のデータ(レコード)、縦1列がデータの項目(カラム/列)です。

たとえば、ユーザー情報を管理するテーブルは次のようなイメージになります。

id name(名前) email(メールアドレス)
1 山田太郎 taro@example.com
2 佐藤花子 hanako@example.com

このように、テーブルを用意しておくことで、「新しいユーザーを追加したい」「特定のメールアドレスのユーザーを探したい」といった操作を、SQL文を使って行えるようになります。次のサンプルは、ユーザーを1件追加するだけの、とてもシンプルなSQLの例です。


-- usersテーブルに1件データを追加するイメージ
INSERT INTO users (name, email)
VALUES ('山田太郎', 'taro@example.com');

実際には、このようなINSERT文をPHPから実行することで、Web画面の入力内容をMySQLのテーブルに保存していきます。このあとで、PHPからMySQLに接続する方法や、INSERT文を安全に実行する方法を順番に見ていきましょう。

2. PHPでMySQLに接続する方法(mysqliとPDOの概要)

2. PHPでMySQLに接続する方法(mysqliとPDOの概要)
2. PHPでMySQLに接続する方法(mysqliとPDOの概要)

PHPでは、MySQLに接続する方法として mysqliPDO の2種類があります。

mysqliとは?

mysqli(MySQL Improved)は、MySQL専用の接続方法です。手続き型とオブジェクト指向の2つの記述方法があり、手軽に利用できます。

PDOとは?

PDO(PHP Data Objects)は、MySQLだけでなく、他のデータベース(PostgreSQLやSQLiteなど)にも対応している接続方法です。セキュリティ面でも強力で、推奨されることが多いです。

mysqliとPDOの比較

特徴 mysqli PDO
対応データベース MySQLのみ MySQL, PostgreSQL, SQLite など
セキュリティ 適切な対策が必要 SQLインジェクション対策が簡単
コードの書きやすさ シンプル オブジェクト指向に統一されている

PHPでMySQLに接続する方法

mysqliを使った接続方法


<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";

// MySQLに接続
$conn = new mysqli($servername, $username, $password, $dbname);

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

PDOを使った接続方法


<?php
$dsn = "mysql:host=localhost;dbname=test_db;charset=utf8";
$username = "root";
$password = "";

try {
    $pdo = new PDO($dsn, $username, $password, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    ]);
    echo "接続成功";
} catch (PDOException $e) {
    echo "接続失敗: " . $e->getMessage();
}
?>

どちらの方法も使えますが、セキュリティを考慮するとPDOの方が推奨されます。

3. mysqliを使ったINSERT文の実行方法

3. mysqliを使ったINSERT文の実行方法
3. mysqliを使ったINSERT文の実行方法

PHPでMySQLにデータを挿入するには、INSERT文を使います。ここでは、mysqliを使った方法を解説します。

テーブルの準備

まず、データを挿入するためのテーブルを用意します。以下のSQLをMySQLで実行してください。


CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL UNIQUE
);

mysqliでINSERT文を実行する

以下のコードでは、mysqliを使ってデータを挿入します。


<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";

// MySQLに接続
$conn = new mysqli($servername, $username, $password, $dbname);

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

// INSERT文を実行
$sql = "INSERT INTO users (name, email) VALUES ('山田 太郎', 'taro@example.com')";

if ($conn->query($sql) === TRUE) {
    echo "データが正常に挿入されました。";
} else {
    echo "エラー: " . $conn->error;
}

$conn->close();
?>

実行結果の例


データが正常に挿入されました。

4. PDOを使ったINSERT文の実行方法

4. PDOを使ったINSERT文の実行方法
4. PDOを使ったINSERT文の実行方法

次に、PDOを使ったINSERT文の実行方法を解説します。PDOは複数のデータベースに対応しており、セキュリティ面でも優れています。

PDOでINSERT文を実行する

以下のコードでは、PDOを使ってデータを挿入します。


<?php
$dsn = "mysql:host=localhost;dbname=test_db;charset=utf8";
$username = "root";
$password = "";

try {
    $pdo = new PDO($dsn, $username, $password, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    ]);

    // INSERT文の実行
    $sql = "INSERT INTO users (name, email) VALUES (:name, :email)";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([
        ":name" => "佐藤 花子",
        ":email" => "hanako@example.com"
    ]);

    echo "データが正常に挿入されました。";
} catch (PDOException $e) {
    echo "エラー: " . $e->getMessage();
}
?>

実行結果の例


データが正常に挿入されました。

プリペアドステートメントのメリット

PDOではプリペアドステートメントを利用することで、以下のメリットがあります。

  • SQLインジェクションを防ぐ
  • コードの可読性が向上する
  • 異なるデータベースにも対応しやすい
-

5. mysqliとPDOの違い(どちらを選ぶべきか)

5. mysqliとPDOの違い(どちらを選ぶべきか)
5. mysqliとPDOの違い(どちらを選ぶべきか)

mysqliとPDOはどちらもMySQLにデータを挿入できますが、用途によって使い分けるべきです。

mysqliの特徴

  • MySQL専用の接続方法
  • 手続き型とオブジェクト指向の両方の書き方が可能
  • 比較的シンプルなコードで記述できる

PDOの特徴

  • MySQL以外にも対応(PostgreSQL, SQLiteなど)
  • セキュリティが強化されており、安全なデータ処理が可能
  • オブジェクト指向で統一されたコードの記述ができる

どちらを選ぶべきか?

条件 mysqli PDO
MySQL専用で十分か △(他のDB対応不要なら不要)
他のデータベースにも接続したいか ×
セキュリティを重視したいか △(SQLインジェクション対策が必要) ○(プリペアドステートメントが標準対応)
オブジェクト指向で書きたいか

MySQLだけを扱うならmysqliでも問題ありませんが、セキュリティや汎用性を考えるとPDOの方が推奨されます。

6. MySQLのエラーハンドリング(INSERT文のエラー処理)

6. MySQLのエラーハンドリング(INSERT文のエラー処理)
6. MySQLのエラーハンドリング(INSERT文のエラー処理)

データを挿入する際にエラーが発生することがあります。例えば、データベースの接続エラーや、入力データが不適切な場合などです。ここでは、mysqliPDOを使ったエラーハンドリングの方法を紹介します。

mysqliを使ったエラーハンドリング


<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";

// MySQLに接続
$conn = new mysqli($servername, $username, $password, $dbname);

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

// INSERT文を実行
$sql = "INSERT INTO users (name, email) VALUES ('田中 一郎', 'ichiro@example.com')";

if ($conn->query($sql) === TRUE) {
    echo "データが正常に挿入されました。";
} else {
    echo "エラー: " . $conn->error;
}

$conn->close();
?>

PDOを使ったエラーハンドリング


<?php
$dsn = "mysql:host=localhost;dbname=test_db;charset=utf8";
$username = "root";
$password = "";

try {
    $pdo = new PDO($dsn, $username, $password, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    ]);

    // INSERT文の実行
    $sql = "INSERT INTO users (name, email) VALUES (:name, :email)";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([
        ":name" => "鈴木 次郎",
        ":email" => "jiro@example.com"
    ]);

    echo "データが正常に挿入されました。";
} catch (PDOException $e) {
    echo "エラー: " . $e->getMessage();
}
?>

エラー処理のポイント

  • エラーが発生した場合は、適切なメッセージを表示する
  • PDOのtry-catchブロックを使うと、エラー内容をキャッチしやすい
  • ログにエラーを記録することで、後から原因を特定しやすくなる

7. セキュリティ対策(SQLインジェクション対策)

7. セキュリティ対策(SQLインジェクション対策)
7. セキュリティ対策(SQLインジェクション対策)

SQLインジェクションとは、悪意のあるSQL文を挿入する攻撃手法です。適切な対策をしないと、データの漏洩や改ざんのリスクがあります。

危険なコードの例


<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";

$conn = new mysqli($servername, $username, $password, $dbname);

// ユーザーからの入力(例: フォーム入力)
$name = $_GET['name'];
$email = $_GET['email'];

// 危険なSQL(直接変数を埋め込む)
$sql = "INSERT INTO users (name, email) VALUES ('$name', '$email')";

if ($conn->query($sql) === TRUE) {
    echo "データが正常に挿入されました。";
} else {
    echo "エラー: " . $conn->error;
}

$conn->close();
?>

このコードでは、$name$emailがそのままSQL文に埋め込まれているため、SQLインジェクション攻撃を受ける可能性があります。

安全な方法(プリペアドステートメントの使用)

プリペアドステートメントを使うことで、SQLインジェクションを防ぐことができます。

mysqliを使った安全なコード


<?php
$conn = new mysqli($servername, $username, $password, $dbname);

// プリペアドステートメントを使用
$stmt = $conn->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->bind_param("ss", $name, $email);

// 例のデータ
$name = "佐藤 三郎";
$email = "saburo@example.com";
$stmt->execute();

echo "データが正常に挿入されました。";

$stmt->close();
$conn->close();
?>

PDOを使った安全なコード


<?php
try {
    $stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");
    $stmt->execute([
        ":name" => "高橋 四郎",
        ":email" => "shiro@example.com"
    ]);

    echo "データが正常に挿入されました。";
} catch (PDOException $e) {
    echo "エラー: " . $e->getMessage();
}
?>

セキュリティ対策のポイント

  • ユーザーの入力をそのままSQLに埋め込まない
  • プリペアドステートメントを使う
  • 入力値を検証し、適切な形式かどうかチェックする

8. まとめとおすすめの使い方

8. まとめとおすすめの使い方
8. まとめとおすすめの使い方

ここまで、PHPでMySQLにデータを挿入する方法について解説しました。最後に、重要なポイントをまとめます。

データ挿入の基本

  • MySQLに接続し、INSERT文を使う
  • mysqli または PDO のどちらかを選ぶ
  • プリペアドステートメントを使うことで、セキュリティを向上させる

エラーハンドリング

  • 接続エラーやSQLエラーが発生した場合、適切なメッセージを表示する
  • エラー内容をログに記録すると、問題の原因を特定しやすい

セキュリティ対策

  • SQLインジェクションを防ぐために、プリペアドステートメントを使う
  • ユーザーの入力値をバリデーションする
  • データの改ざんや漏洩を防ぐため、適切なアクセス制御を行う

PHPでMySQLにデータを挿入する方法は、Webアプリ開発の基本です。適切な方法を学び、安全なアプリケーションを作りましょう。

まとめ

まとめ
まとめ

PHPでMySQLにデータを挿入する方法について学んだ今回の内容は、Webアプリケーション開発において欠かせない基礎知識です。INSERT文の使い方はもちろん、mysqliとPDOの違いプリペアドステートメントによるセキュリティ対策、そしてtry-catchを使ったエラーハンドリングの重要性まで幅広く理解できました。
mysqliはMySQL専用で手軽に使える反面、セキュリティ対策には注意が必要です。一方、PDOは複数のデータベースに対応し、SQLインジェクションに強く、今後の拡張性を考えると特に初心者にはおすすめの方法と言えるでしょう。
また、SQLインジェクションの脅威とその対策方法についても、実際の危険なコードと安全なプリペアドステートメントの例を比較しながら理解を深めることができました。
こうした知識は、データベースに安全かつ正確に情報を追加するための土台となります。実際に以下のようなPHPコードを何度も書いて練習することで、初心者の方でも安心して開発が進められるようになるはずです。

安全なINSERT文のサンプル(PDO使用)


<?php
$dsn = "mysql:host=localhost;dbname=test_db;charset=utf8";
$username = "root";
$password = "";

try {
    $pdo = new PDO($dsn, $username, $password, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    ]);

    $stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");
    $stmt->execute([
        ":name" => "中村 一美",
        ":email" => "kazumi@example.com"
    ]);

    echo "データが正常に挿入されました。";
} catch (PDOException $e) {
    echo "エラー: " . $e->getMessage();
}
?>

こんなときどうする?よくある質問

  • Q. データが挿入されない場合は?
    → 接続情報やSQL文に誤りがないか確認しましょう。echovar_dumpを使ってデバッグすると効果的です。
  • Q. エラーメッセージが表示されるけど原因が分からない
    try-catch内で$e->getMessage()を出力することで、原因の詳細が分かります。
  • Q. SQLインジェクションって実際に危険なの?
    → はい。ログインバイパスやデータの削除など、重大な被害につながる可能性があります。常にプリペアドステートメントを使いましょう。

覚えておくべきキーワード

  • PHP
  • MySQL
  • INSERT文
  • データベース接続
  • mysqli
  • PDO
  • プリペアドステートメント
  • SQLインジェクション対策
  • エラーハンドリング
先生と生徒の振り返り会話

新人

「最初はちょっと難しそうに感じたんですが、INSERT文とPDOの使い方がだんだんわかってきました!」

先輩

「そうですね。基本的な使い方だけでなく、セキュリティ対策やエラー処理も含めて覚えると、実務でも役に立ちますよ。」

新人

「特にプリペアドステートメントの仕組みは目からウロコでした。安全性って大事なんですね。」

先輩

「その調子で、今後はUPDATEやDELETE文も学んでいきましょう。Web開発に必要なスキルはこれからどんどん広がっていきますよ!」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

PHPでMySQLに接続する方法にはどんな種類がありますか?

PHPではMySQLに接続する方法として、mysqliとPDOの2種類があります。mysqliはMySQL専用でシンプルな構文、PDOは複数のデータベースに対応しセキュリティ面にも優れています。

初心者におすすめのMySQL接続方法はPDOですか?

はい、セキュリティ面や将来的な拡張性を考慮すると、プリペアドステートメントが使いやすいPDOの方が初心者にもおすすめです。
コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

関連記事:
カテゴリの一覧へ
新着記事
New1
PHP
PHPのCookieセキュリティを完全ガイド!初心者でもわかるSecureとHttpOnlyの使い方
New2
PHP
PHPのCSRF対策を完全理解!トークンを使った安全なフォーム送信の仕組みを初心者向けに徹底解説
New3
PHP
PHPのSQLインジェクション対策を完全解説!初心者でも安全にデータベースを扱う方法
New4
PHP
PHPでカウントダウンタイマーを作る方法!初心者向けにやさしく解説
-
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonでテキストファイルを1行ずつ読み込む方法(readline() / readlines())
No.2
Java&Spring記事人気No2
PHP
初心者向けPHPでMySQLからデータを取得する方法(SELECT文)完全ガイド
No.3
Java&Spring記事人気No3
Python
Pythonのリストの重複を削除する方法を解説!初心者向けにsetとdict.fromkeysの使い方をやさしく説明
No.4
Java&Spring記事人気No4
Python
Pythonで経過時間を測る方法をやさしく解説!初心者向けtime.perf_counterとtime.sleepの使い方
No.5
Java&Spring記事人気No5
Python
PythonでExcelファイル(.xlsx)を操作する方法を徹底解説!初心者でもできるopenpyxl・pandasの使い方
No.6
Java&Spring記事人気No6
Python
Pythonでエラースタックトレースを表示・取得する方法を徹底解説!初心者向け例外処理入門
No.7
Java&Spring記事人気No7
PHP
PHPのXSS対策を完全ガイド!初心者でもわかる安全なWebアプリの作り方
No.8
Java&Spring記事人気No8
PHP
PHPのOAuth認証をやさしく解説!Google・Facebookログインを初心者向けに実装しよう
-
-