www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 芯聞號(hào) > 充電吧
[導(dǎo)讀]1、緣由自從2010年開(kāi)始試用ThinkPHP以來(lái),的確帶來(lái)了許多方便。的確給我?guī)?lái)了許多方便。此次應(yīng)為數(shù)據(jù)頻繁備份需要,而每次遠(yuǎn)程連接到服務(wù)器頗為不便。變萌生了寫(xiě)個(gè)ThinkPHP數(shù)據(jù)庫(kù)備份SQL生

1、緣由

自從2010年開(kāi)始試用ThinkPHP以來(lái),的確帶來(lái)了許多方便。的確給我?guī)?lái)了許多方便。此次應(yīng)為數(shù)據(jù)頻繁備份需要,而每次遠(yuǎn)程連接到服務(wù)器頗為不便。變萌生了寫(xiě)個(gè)ThinkPHP數(shù)據(jù)庫(kù)備份SQL生成類的念頭。

2、介紹

由于在數(shù)據(jù)庫(kù)中有使用觸發(fā)器。因此也需要一并備份。并且為了插入數(shù)據(jù)的時(shí)候不會(huì)受到觸發(fā)器影響而破壞先前插入的數(shù)據(jù),在插入數(shù)據(jù)之前生成了刪除觸發(fā)器的代碼。 本類并不能生成數(shù)據(jù)表的創(chuàng)建和刪除代碼,因此在使用中請(qǐng)注意保證兩端表結(jié)構(gòu)的一致。


做WEB開(kāi)發(fā),一直以來(lái),都采用 Navicat For Mysql 將本地?cái)?shù)據(jù)庫(kù)同步到服務(wù)器上。前些天,突然心血來(lái)潮,將本地?cái)?shù)據(jù)庫(kù)升級(jí)到了 Mysql 5.5版本,再次將數(shù)據(jù)同步的時(shí)候卻發(fā)生了錯(cuò)誤。想起之前寫(xiě)過(guò)的?ThinkPHP 實(shí)現(xiàn)Mysql數(shù)據(jù)庫(kù)備份?只有備份數(shù)據(jù)的功能,而沒(méi)有導(dǎo)出表結(jié)構(gòu)的功能。于是想到了升級(jí)一下。讓其更完整。

本次升級(jí) 增加了 備份表結(jié)構(gòu)、視圖功能。導(dǎo)出數(shù)據(jù)增加了類型判斷,insert 語(yǔ)句當(dāng)字段為空的時(shí)候會(huì)輸出 NULL,當(dāng)為數(shù)字 的時(shí)候則不會(huì)帶上 單引號(hào)。



query("SHOW?FULL?TABLES?FROM?`{$dbName}`?WHERE?Table_Type?=?'BASE?TABLE'");

????????foreach?($result?as?$v){
????????????$tbArray[]=$v['Tables_in_'.C('DB_NAME')];
????????}
????????return?$tbArray;
????}
????static?protected?function?getViews()
????{
????????$dbName=C('DB_NAME');
????????$result=M()->query("SHOW?FULL?TABLES?FROM?`{$dbName}`?WHERE?Table_Type?=?'VIEW'");

????????foreach?($result?as?$v){
????????????$tbArray[]=$v['Tables_in_'.C('DB_NAME')];
????????}
????????return?$tbArray;
????}

????/**
?????*?@description?導(dǎo)出SQL數(shù)據(jù),但不包含表創(chuàng)建代碼。
?????*?@static
?????*?@return?string
?????*/
????static?public?function?ExportAllData()
????{
????????$tables?=?self::getTables();
????????$arrAll?=?array(
????????????"SET?FOREIGN_KEY_CHECKS=0;",
????????????self::BuildAllTriggerDropSql(),
????????????self::BuildTableSql(),
????????????self::BuildViewSql()
????????);
????????$tbl?=?new?Model();
????????foreach($tables?as?$table)
????????{
????????????$arrAll[]="rnDELETE?FROM?{$table};";

????????????/*
????????????$rs?=?$tbl->query("SHOW?COLUMNS?FROM?{$table}");
????????????$arrFields?=?array();
????????????foreach?($rs?as?$k=>&$v){
????????????????$arrFields[]?=?"`{$v['Field']}`";

????????????}

????????????$sqlFields?=?implode($arrFields,",");
????????????*/
????????????$rs=$tbl->query("select?*?from?`{$table}`");
????????????foreach?($rs?as?$k=>&$v){
????????????????$arrValues?=?array();
????????????????foreach($v?as?$key=>$val)
????????????????{
????????????????????if(is_numeric($val)){
????????????????????????$arrValues[]=$val;
????????????????????}else?if(is_null($val)){
????????????????????????$arrValues[]='NULL';
????????????????????}else{
????????????????????????$arrValues[]="'".addslashes($val)."'";
????????????????????}
????????????????}
????????????????$arrAll[]?=?"INSERT?INTO?`{$table}`?VALUES?(".implode(',',$arrValues).");";
????????????}
????????}
????????$arrAll[]=self::BuildTriggerCreateSql();
????????return?implode("rn",$arrAll);
????}

????static?protected?function?BuildTableSql()
????{
????????$tables?=?self::getTables();
????????$arrAll?=?array();
????????foreach($tables?as?&$val){
????????????$rs?=?M()->query("SHOW?CREATE?TABLE?`{$val}`");

????????????$tbSql?=?preg_replace("#CREATE(.*)\s+TABLE#","CREATE?TABLE",$rs[0]['Create?Table']);

????????????$arrAll[]?=?"DROP?TABLE?IF?EXISTS?`{$rs[0]['Table']}`;rn{$tbSql};rn";
????????}

????????return?implode("rn",$arrAll);
????}

????static?protected?function?BuildViewSql()
????{
????????$views?=?self::getViews();
????????$arrAll?=?array();
????????foreach($views?as?&$val){
????????????$rs?=?M()->query("SHOW?CREATE?VIEW?`{$val}`");
????????????$tbSql?=?preg_replace("#CREATE(.*)\s+VIEW#","CREATE?VIEW",$rs[0]['Create?View']);

????????????$arrAll[]?=?"DROP?VIEW?IF?EXISTS?`{$rs[0]['View']}`;rn{$tbSql};rn";
????????}
????????return?implode("rn",$arrAll);
????}
????/**
?????*?@description?如果存在觸發(fā)器,生成刪除代碼。原因是:插入數(shù)據(jù)的時(shí)候可能會(huì)受到觸發(fā)器影響。
?????*?@static
?????*?@return?string
?????*/
????static?public?function?BuildAllTriggerDropSql()
????{
????????$rs?=?M()->query("show?triggers");
????????$arrAll?=?array();
????????foreach?($rs?as?$k=>&$v)
????????{
????????????$arrSql?=?array(
????????????????'DROP?TRIGGER?IF?EXISTS?`',$v['Trigger'],'`;'
????????????);

????????????$arrAll[]?=?implode('',$arrSql);
????????}
????????return?implode("rn",$arrAll);
????}

????/**
?????*?@description?生成所有觸發(fā)器的創(chuàng)建代碼。
?????*?@static
?????*?@return?string
?????*/
????static?protected?function?BuildTriggerCreateSql()
????{
????????$rs?=?M()->query("show?triggers");
????????$arrAll?=?array();
????????foreach?($rs?as?$k=>&$v)
????????{
????????????$arrSql?=?array(
????????????????'CREATE?TRIGGER?`',$v['Trigger'],'`?',$v['Timing'],'?',$v['Event'],'?ON?`',
????????????????$v['Table'],'`?FOR?EACH?ROW?',$v['Statement'],';'
????????????);

????????????$arrAll[]?=?implode('',$arrSql);
????????}
????????return?implode("rn",$arrAll);
????}
}


調(diào)用示例:


vendor('DBExport',COMMON_PATH);
header('Content-type:?text/plain;?charset=UTF-8');
$dbName?=?C('DB_NAME');
header("Content-Disposition:?attachment;?filename="{$dbName}.sql"");
echo?DBExport::ExportAllData()




本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉