PHP MySQLへ接続してinsert/update/deleteする

PHPでMySQL(MariaDB)へ接続してinsert/update/deleteするサンプルです。
(確認環境:PHP 7.2.8,XAMPP 7.2.8)

目次

SQLの実行 insertのサンプル
  updateのサンプル
  deleteのサンプル
  プレースホルダ
環境 接続先のデータベースとテーブル

insertのサンプル

insertのサンプルのコードです。

<?php
// DB接続情報
$dsn = 'mysql:host=localhost:3309;dbname=testphp;charset=utf8mb4';
$username = 'root';
$password = '';

$name = '竹田';
$romaji = 'takeda';

// try-catch
try{
	// データベースへの接続を表すPDOインスタンスを生成
	$dbh = new PDO($dsn,$username,$password);

	// 静的プレースホルダを指定
	$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

	// DBエラー発生時は例外を投げる設定
	$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


	// SQL文 :nameと:romajiは、名前付きプレースホルダ
	$stmt = $dbh->prepare("INSERT INTO employee(name,romaji) VALUES (:name, :romaji)");

	//トランザクション処理
	$dbh->beginTransaction();

	try{
		$stmt->bindParam(':name', $name);
		$stmt->bindParam(':romaji', $romaji);
		$stmt->execute();

		//コミット
		$dbh->commit();

	}catch (PDOException $e) {
		//ロールバック
		$dbh->rollback();
		throw $e; //
	}
	// 接続を閉じる
	//$pdo = null; スクリプト終了時に自動で切断されるので不要
}catch (PDOException $e) {
	// UTF8に文字エンコーディングを変換します
	exit(mb_convert_encoding($e->getMessage(),'UTF-8','SJIS-win'));
}

3行目は、DBの接続情報です。
23行目は、名前付きプレースホルダを使用したSQLです。(:名称)の箇所が名前付きプレースホルダです。
29,30行目は、7,8行目の変数を23行目のプレースホルダにバインドしています。

updateのサンプル

updateのサンプルのコードです。

<?php
// DB接続情報
$dsn = 'mysql:host=localhost:3309;dbname=testphp;charset=utf8mb4';
$username = 'root';
$password = '';
$name = '中田';
$romaji = 'nakata';
$id = 3;

// try-catch
try{
	// データベースへの接続を表すPDOインスタンスを生成
	$pdo = new PDO($dsn,$username,$password);

	// 静的プレースホルダを指定
	$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

	// DBエラー発生時は例外を投げる設定
	$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


	// SQL文 :nameと:idは、名前付きプレースホルダ
	$stmt = $pdo->prepare("UPDATE employee SET name=:name,romaji=:romaji WHERE id=:id");

	//トランザクション処理
	$pdo->beginTransaction();

	try{
		$stmt ->bindParam(':name', $name);
		$stmt ->bindParam(':romaji', $romaji);
		$stmt ->bindParam(':id', $id);
		$stmt->execute();

		//コミット
		$pdo->commit();

	}catch (PDOException $e) {
		//ロールバック
		$pdo->rollback();
		throw $e; //
	}
	// 接続を閉じる
	//$pdo = null; スクリプト終了時に自動で切断されるので不要
}catch (PDOException $e) {
	// UTF8に文字エンコーディングを変換します
	exit(mb_convert_encoding($e->getMessage(),'UTF-8','SJIS-win'));
}
?>

3行目は、DBの接続情報です。
23行目は、名前付きプレースホルダを使用したSQLです。(:名称)の箇所が名前付きプレースホルダです。
29-31行目は、6-8行目の変数を23行目のプレースホルダにバインドしています。

deleteのサンプル

deleteのサンプルのコードです。

<?php
// DB接続情報
$dsn = 'mysql:host=localhost:3309;dbname=testphp;charset=utf8mb4';
$username = 'root';
$password = '';

$id = 3;


// try-catch
try{
	// データベースへの接続を表すPDOインスタンスを生成
	$pdo = new PDO($dsn,$username,$password);

	// 静的プレースホルダを指定
	$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

	// DBエラー発生時は例外を投げる設定
	$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


	// SQL文 :idは、名前付きプレースホルダ
	$stmt = $pdo->prepare("DELETE FROM employee WHERE id=:id");

	//トランザクション処理
	$pdo->beginTransaction();

	try{
		$stmt ->bindParam(':id', $id);
		$stmt->execute();

		//コミット
		$pdo->commit();

	}catch (PDOException $e) {
		//ロールバック
		$pdo->rollback();
		throw $e; //
	}
	// 接続を閉じる
	//$pdo = null; スクリプト終了時に自動で切断されるので不要
}catch (PDOException $e) {
	// UTF8に文字エンコーディングを変換します
	exit(mb_convert_encoding($e->getMessage(),'UTF-8','SJIS-win'));
}
?>

3行目は、DBの接続情報です。
23行目は、名前付きプレースホルダを使用したSQLです。(:名称)の箇所が名前付きプレースホルダです。
29行目は、7行目の変数を23行目のプレースホルダにバインドしています。

プレースホルダ

  • SQLにある(:名称)は、名前付きプレースホルダです。
    →疑問符(?)のプレースホルダのやり方もあります。
  • 動的に値をセットできます。
  • 入力される不正な文字を抑止できるのでSQLインジェクション対策になります。
  • 固定文字列のSQLの部分がプリコンパイルされるので実行速度が上がります。
  • place=場所、holder=入れものです。

リンク

以下はPHPマニュアルのPDOの接続、および接続の管理のリンクです。
https://php.net/manual/ja/pdo.connections.php

以下はPHPマニュアルのPDO::setAttributeのリンクです。
https://php.net/manual/ja/pdo.setattribute.php

以下はPHPマニュアルのPDO::begintransactionのリンクです。
https://php.net/manual/ja/pdo.begintransaction.php

接続先のデータベースとテーブル

XAMPPのMySQLを使用しています。
XAMPPのインストール方法と、XAMMPのMySQLにデータベースとテーブルを作成する方法は以下を参照願います。

XAMPP インストールとHello Worldを表示
XAMPP phpMyAdminでデータベースを作成/削除する手順
XAMPP phpMyAdminでテーブルを作成/データを登録する

関連の記事

PHP MySQLへ接続してselectするサンプル
PHP フォームからMySQLへ接続してselectするサンプル
PHP フォームの値を別画面に渡す(GET/POST)

△上に戻る