MySQL テーブルのレコードを複製する【PHP PDO】

MySQL テーブルのレコードを複製する【PHP PDO】

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);

参考にしたサイト

phpカテゴリの最新記事

%d人のブロガーが「いいね」をつけました。