
PHPのPDOを通して同テーブルのレコードを複製する方法です。
コピー機能などを実装する際に使えそうですね。実際に使えました。
環境
mysql Ver 14.14 Distrib 5.7.25
PHP 7.2.14
概要
まずは簡単な流れを確認します。
- ①同一セッション内でのみで使用されるテーブル(TMPPORARY TABLE 以下 TT)を生成
- ②TTに対象のテーブルのDDL(構造)をコピー
- ③複製したいレコードをTTに挿入
- ④idを対象テーブルの最大値より1増やす
- ⑤TTのレコードを対象のテーブルに追加
- ⑥TTが削除される
実装
今記事のメイン部分だけでなく、現実味を与えるためにPDO接続の流れを前後に追加していますので、
参考になれば幸いです。
tmp_table: 一時的に生成されるテーブル
taisho_table: 複製したいレコードが存在するテーブル
$dbh = new PDO( DSN, DBUSER, DBPASS, array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ) ); //sql生成 $sql = "CREATE TEMPORARY TABLE tmp_table LIKE taisho_table;"; $sql .= "INSERT INTO tmp_table SELECT * FROM taisho_table WHERE id = {$id} ;"; $sql .= "UPDATE tmp_table set id = (SELECT MAX(id) FROM taisho_table) + 1;"; $sql .= "INSERT INTO taisho_table SELECT * FROM tmp_table;"; $prepare = $dbh->prepare($sql); $result = $prepare->execute($data);