カテゴリ: PHP 更新日: 2025/05/29

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

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

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

新人

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

先輩

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

新人

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

先輩

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

-

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

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

MySQL(マイエスキューエル)は、世界中で使われているデータベース管理システム(DBMS)です。データを保存、取得、更新、削除できるため、Webアプリケーションでよく使われます。

たとえば、ユーザー登録機能やブログ記事の管理などでデータベースが利用されます。

MySQLの主な特徴

  • 無料で利用できるオープンソースのデータベース
  • 高速なデータ処理が可能
  • PHPと組み合わせて使うことが多い

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アプリ開発の基本です。適切な方法を学び、安全なアプリケーションを作りましょう。

コメント
コメント投稿は、ログインしてください

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

カテゴリの一覧へ
新着記事
Pythonのエラーメッセージの読み方!よくあるエラーと解決方法
PHPの関数(function)の基本を完全ガイド!初心者でもわかる使い方
Pythonの条件式でNoneを判定する方法!is None vs == None の違い
Pythonのpass文とは?一時的なコードブロックをスキップする方法
人気記事
No.1
Java&Spring記事人気No1
PHPの配列をソートする方法!sort, rsort, asort, ksortの使い方を丁寧に解説します!
No.2
Java&Spring記事人気No2
PHPの関数(function)の基本を完全ガイド!初心者でもわかる使い方
No.3
Java&Spring記事人気No3
PHPとは?初心者向けにわかりやすく解説
No.4
Java&Spring記事人気No4
PHP の文字列の基本操作(連結・切り出し・長さ)の使い方
-