>백엔드 개발 >PHP 튜토리얼 >Thinkphp 백업 데이터베이스 방법 Sharing_php 팁

Thinkphp 백업 데이터베이스 방법 Sharing_php 팁

WBOY
WBOY원래의
2016-05-16 20:26:36976검색

THINKPHP에는 데이터베이스를 백업할 수 있는 방법이 없는 것 같아서 제가 직접 작성했습니다. 데이터베이스 연결 및 트랜잭션 처리는 pdo를 사용하고 있으니 필요하신 분은 저에게 연락하셔서 mysql이나 mysqli를 작성해 주시면 됩니다. 🎜>

코드 복사 코드는 다음과 같습니다.
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(“콘텐츠 처리: 첨부 파일; 파일 이름=$dbname.sql”);
echo $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); //튜닝 매개변수를 설정하고 오류 발생 시 예외 발생
} catch (PDOException $e) {
echo $e->getMessage(); //연결이 비정상일 경우 오류 메시지가 표시됩니다
나가세요;
}
$mysql = "DROP DATABASE IF EXISTS `$dbname`;n"; //$mysql은 sql 문을 로드합니다. 여기에 데이터베이스가 있으면 해당 데이터베이스를 삭제합니다.
$creat_db=$pdo->query("show create 데이터베이스 $dbname")->fetch();//sql 문을 보려면 show create 데이터베이스를 사용하세요
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_collate=$pdo->query(“information_schema.SCHEMATA에서 DEFAULT_COLLATION_NAME 선택, WHERE SCHEMA_NAME ='$dbname' LIMIT 1″)->fetch();
$mysql.=”COLLATE “.$db_collate[‘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 `기호는 백틱입니다. 필드 이름은 백틱으로 묶입니다.
$item_values ​​​​= array_values($item_query); //배열 값, 즉 필드에 해당하는 값을 가져옵니다
$item_values ​​​​= array_map(“addslashes”, $item_values) //특수문자 번역 및 추가
$value_string = Join(“','”, $item_values); //value1′,'value2 값과 같은 결합 값은 작은따옴표로 묶입니다.
$value_string = "('" . $value_string . "')," //값 주위에 괄호 추가
$값.=” ” . $value_string; //최종적으로 $value
로 반환됨 }
if ($values ​​​​!= “”) {//$values ​​​​가 비어 있지 않은 경우, 즉 테이블에 콘텐츠가 있는 것입니다
//삽입문 작성
$insert_sql = "`$table_name`(`$items`) 값에 삽입" . rtrim($values, ",") ";nr";
//이 명령문을 $mysql
에 작성합니다. $mysql.=$insert_sql;
}
}
}

$mysql을 반환합니다.
}
}
?>

친구들이 직접 자신의 프로젝트에 이식할 수 있는 아주 실용적인 기능이지 않나요?

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.