程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> PHP恢復sql出現的問題

PHP恢復sql出現的問題

編輯:PHP綜合

PHP 恢復MySQL 備份文件裡面有多個“;” 導致程序出錯。
這個是我用上個文檔寫的PHP備份MySQL生成的SQL備份腳本文件。
今天,要編寫的是SQL恢復的功能,可是失敗了。經過我的檢查發現是SQL裡面的“;”
所導致的,我分析了,織夢CMS的代碼,它是做表結構還有,內容放到不同的文件裡面。而又有規律,以下是織夢的代碼。
 if($startgo==0 && $structfile!='')
 {
  $tbdata = '';
  $fp = fopen("$bkdir/$structfile",'r');
  while(!feof($fp))
  {
   $tbdata .= fgets($fp,1024);
  }
  fclose($fp);
  $querys = explode(';',$tbdata);

  foreach($querys as $q)
  {
   $dsql->ExecuteNoneQuery(trim($q).';');
  }
  if($delfile==1)
  {
   @unlink("$bkdir/$structfile");
  }
  $tmsg = "<font color='red'>完成數據表信息還原,准備還原數據...</font>";
  $doneForm = "<form name='gonext' method='post' action='sys_data_done.PHP?dopost=redat'>
        <input type='hidden' name='startgo' value='1' />
        <input type='hidden' name='delfile' value='$delfile' />
        <input type='hidden' name='bakfiles' value='$bakfilesTmp' />
  </form>\r\n{$doJS}\r\n";
  PutInfo($tmsg,$doneForm);
  exit();
 }

其中,最重要的就是這三句了。
      $querys = explode(';',$tbdata);

  foreach($querys as $q)
  {
   $dsql->ExecuteNoneQuery(trim($q).';');
  }
織夢,它也遇到這個問題了。而普通的install備份則,都是每條是一行。所以代碼如下:

$fp = fopen("$bkdir/$nowfile",'r');
   while(!feof($fp))
   {
    $line = trim(fgets($fp,512*1024));
    if($line=="")
    {
     continue;
    }
    $rs = $dsql->ExecuteNoneQuery($line);
    if($rs)
    {
     $oknum++;
    }
   }

而我的問題和它們不一樣。我是把所有的數據備份到,同一個SQL備份文件裡面,用$querys = explode(';',$tbdata);折分得到數組在,foreach吧,不太現實,因為有的INSTALL裡面也會有“;” ,雖然那種可能不大。
我最後決定使用,每個SQL一行的方法來解決這個問題。
不過,我又看到PHPmyadmin發現那個就是把一大堆的SQL復制進去,它就可以正常執行,它用的什麼技術來做到的呢。
編程不能不求甚解。切記。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved