ホームページ >バックエンド開発 >PHPチュートリアル >Thinkphp バックアップ データベース メソッドの共有、thinkphp バックアップ データベース_PHP チュートリアル

Thinkphp バックアップ データベース メソッドの共有、thinkphp バックアップ データベース_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:10:11850ブラウズ

thinkphp でデータベースをバックアップする方法、thinkphp でデータベースをバックアップする方法を共有します

THINKPHPにはデータベースをバックアップするメソッドがないようなので、データベース接続とトランザクション処理はpdoを使用します。必要な場合は、mysqlまたはmysqliのものを書いてください。

コードをコピーします コードは次のとおりです:
class SqlAction は Action{
を拡張します 関数 outsql(){
header(“Content-Type:text/html;charset=utf-8”);
/*C メソッドを使用してデータベース構成を読み取る*/
$host=C('DB_HOST');
$db_name=C('DB_NAME');
$user=C('DB_USER');
$password=C('DB_PWD');
/*データベースをエクスポートするプライベート メソッドを呼び出します*/
$outstream=$this->outputSql($host, $dbname, $user, $password);
/*エクスポート データベースをダウンロード*/
header(“Content-Disposition:attachment;filename=$dbname.sql”);
エコー $outstream;
}
/*
* データベースエクスポート関数outputSql
* PDOメソッドを使用してデータベースデータをエクスポートします
* $host ホスト名 (localhost など)
* $dbname データベース名
* $user ユーザー名
* $password パスワード
* $flag フラグ ビット 0 または 1。0 はデータベース構造のみをエクスポートすることを意味し、1 はデータベース構造とデータをエクスポートすることを意味します。 */
プライベート関数 OutputSql($host, $dbname, $user, $password, $flag=1) {
試してみてください{
$pdo = new PDO(“mysql:host=$host;dbname=$dbname”, $user, $password); //データベースに接続します
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 調整パラメーターを設定し、エラーが発生した場合は例外をスローします
} キャッチ (PDOException $e) {
echo $e->getMessage(); //接続が異常な場合はエラーメッセージがスローされます
終了します;
}
$mysql = "DROP DATABASE IF EXISTS `$dbname`;n"; //$mysql は、ここにデータベースが存在する場合、データベースを削除します
。 $creat_db=$pdo->query(“show create database $dbname”)->fetch();//SQL ステートメントを表示するには show create database を使用します
preg_match(‘/DEFAULT CHARACTER SET(.*)*/’, $creat_db[‘Create Database’],$matches);//DEFAULT CHARACTER SET の後の文字セットを定期的に削除します
$mysql.=”CREATE DATABASE `$dbname` DEFAULT CHARACTER SET $matches[1]”;//このステートメントは CREATE DATABASE `test_db` DEFAULT CHARACTER SET utf8 のようなものです
/*COLLATE utf8_general_ci などのデータベースの文字列を検索*/
$db_collat​​e=$pdo->query(“SELECT DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME =’$dbname’ LIMIT 1”)->fetch();
$mysql.=”COLLATE “.$db_collat​​e[‘DEFAULT_COLLATION_NAME’].”;nUSE `$dbname`;nn”;
$statments = $pdo->query("show tables"); //結果セットを返し、すべてのテーブル名を表示するにはテーブルを表示します
foreach ($statments as $value) {//この結果セットを走査し、各テーブル名に対応する情報をエクスポートします
$table_name = $value[0] //テーブル名を取得します
; $mysql.=”DROP TABLE IF EXISTS `$table_name`;n” // 各テーブルの前に Drop ステートメントを準備します
$table_query = $pdo->query(“show create table `$table_name`”) //テーブル作成情報の結果セットを取得します
$create_sql = $table_query->fetch(); // fetch メソッドを使用して結果セットに対応する配列を取得します
$mysql.=$create_sql['Create Table'] . ";rnrn"; //テーブル作成情報を書き込みます
if ($flag != 0) {//フラグが 0 でない場合、テーブルの内容の取得を続行し、挿入ステートメントを生成します
$iteams_query = $pdo->query(“select * from `$table_name`”) //テーブル内のすべてのフィールドの結果セットを取得します
$values = "" //挿入値をロードするための空の文字列を準備します
; $items = ""; //テーブルフィールド名をロードするための空の文字列を準備します
while ($item_query = $iteams_query->fetch(PDO::FETCH_ASSOC)) { //関連付けられたクエリを使用して、テーブル内のフィールド名と値の配列を返します
$item_names = array_keys($item_query); // フィールド名である配列キー値を取得します
$item_names = array_map(“addslashes”, $item_names) //特殊文字を変換して
を追加します。 $items = join(‘`,`’, $item_names); //item1`、`item2` のような結合フィールド名は、キーボード 1 の隣にバッククォートで囲まれています
。 $item_values = array_values($item_query) //フィールドに対応する値である配列値を取得します
; $item_values = array_map(“addslashes”, $item_values) //特殊文字を変換して
を追加します。 $value_string = join("','", $item_values); //value1','value2 のような結合値は一重引用符で囲まれます
$value_string = “(‘” . $value_string . “‘),” //値を括弧で囲みます
; $values.=”n” . $value_string; //最終的に $value に戻ります
}
if ($values != “”) {//$values が空でない場合、テーブルにはコンテンツがあります
//挿入文を書く
$insert_sql = “INSERT INTO `$table_name` (`$items`) VALUES” . rtrim($values, “,”) “;nr”;
//このステートメントを $mysql に書き込みます
$mysql.=$insert_sql;
}
}

} $mysql を返します;

}
}
?>

これは、友人が自分のプロジェクトに直接移植できる非常に実用的な機能ではないでしょうか。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/937091.html技術記事 thinkphpでデータベースをバックアップする方法を共有する THINKPHPにはデータベースをバックアップするメソッドがないようなので、データベース接続とトランザクション処理は...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。