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)