データベースを移行する際に、移行前後のデータ項目数が一致しているか、データが正常に保存されているかなど、必要な検証を行うのに非常に役立ちます。検証エントリの数は簡単です。もちろん、重要なデータについては、すべてのエントリにエラーが含まれていない必要があります。省略すると面倒です。テーブルは同じサーバー上になくなります。このときどうすればよいでしょうか? 方法はあります:
上記の方法も同時に考えたもので、悪くはないのですが、改善の余地があると思います:
私の考えは次のとおりです:
2番目の方法の利点は、出力ファイルが特定の範囲内に縮小されるため、比較が容易になることですが、1番目の方法のように、キーフィールドを通じて異なるデータの場所を直接見つけることができないという欠点もあります。
以下は 2 番目のメソッドの効果合計の具体的なコード実装です:
'ローカルホスト'、 'ポート' => '3306', 'ユーザー' => 'ルート'、 'pswd' => '123456', 'charset' => 'utf8', 'テーブル' => 配列( 「lagou.pos」、 'lagou.pos_innodb', )、 ); //フォーマットを検証する if(!$link = mysql_connect($dbinfos['host'].":".$dbinfos['port'],$dbinfos['user'], $dbinfos['pswd'])) { die("[{$host}@{$port}] への接続に失敗しました!!"); } if(!mysql_query("セット名 {$dbinfos['charset']}")) { die("文字セットエラーの設定: ".mysql_error()); } foreach ($dbinfos['tables'] として $table) { if($is_count) { $sql = "{$table} の数値として count(*) を選択します"; $ret = mysql_query($sql); if(!$ret) { die("エラー: ".mysql_error()); } $ret = mysql_fetch_array($ret, MYSQL_ASSOC); echo "{$table} : {$ret['nums']}n"; } if($is_md5) { $path = $is_md5.DIRECTORY_SEPARATOR.$table; $sql = "{$table} から * を選択"; $ret = mysql_query($sql); $フラグ = 0; $フィールド = ''; while ($_ret = mysql_fetch_array($ret, MYSQL_NUM)) { $フラグ++; その間($_ret) { $fields .= array_pop($_ret); } if($flag % $conbine_num == 0) { file_put_contents($path, md5($fields)."n", FILE_APPEND); $フィールド = ''; } } if($flag % $conbine_num != 0 && $flag > 0) { file_put_contents($path, md5($fields)."n", FILE_APPEND); } echo "ファイル情報に保存: ".realpath($path)."n"; } }