2016-05-18 42 views
1

我一直在尋找方法爲我的數據庫網站啓用導出功能。我的目標是構建一個非常簡單的PHP代碼來執行此操作,它只需將我的一個MySQL表的內容導出到用戶桌面,或者爲用戶提供可點擊的鏈接,以便他可以下載導出的數據庫。數據庫必須使用Excel/CSV(因爲我將使用此功能導入/導出數據庫備份功能)。將Excel數據庫導出爲Excel CSV將數據導出到PHP中的桌面

我看到fputcsv()等老方法,如MySQL(而不是庫MySQLi)代碼,但都失敗了,一些創建服務器上的目錄中的CSV文件,而其他方法簡單給像

錯誤爆炸()預計參數2是字符串,對象

fputcsv()給出的預期參數2是陣列,在

空給我感覺這應該是簡單的,但什麼是最好的方法或代碼用於出口數據庫功能?

編輯:

組合和測試一系列的選項之後,我能解決這個問題。我在這裏分享,以便那些遇到我的困境的人不會像我那樣艱難:(

當用戶點擊EXPORT按鈕時,Chrome瀏覽器會自動下載一個CSV文件,其中包含數據庫的副本字段名。

<?php 
    include('/connectme.php'); 

    $thequery = "SELECT * FROM members"; 
    $result = mysqli_query($conn,$thequery); 

    $file = fopen("php://output","w"); 

    header('Content-Type: text/csv'); 
    header('Content-Disposition: attachment; filename="exported.' . date("Y.m.d") . '.csv"'); 
    header('Pragma: no-cache');  
    header('Expires: 0'); 

    $emptyarr = array(); 
    $fieldinf = mysqli_fetch_fields($result); 
     foreach ($fieldinf as $valu) 
    { 
     array_push($emptyarr, $valu->name); 
     } 
    fputcsv($file,$emptyarr); 

    while($row = mysqli_fetch_assoc($result)) 
    { 
     fputcsv($file,$row); 
    } 
    fclose($file); 

    mysqli_free_result($result); 
    mysqli_close($conn); 
?> 
+0

的[使用PHP代碼導出一個MySQL表爲CSV]可能的複製(http://stackoverflow.com/q/17362686/2156244) – Apb

+0

,雖然是舊版本的MySQL,我看到了類似的示例,並試圖複製它,除了脫離mysql的警告,它給了一些錯誤。沒有新的方式做到這一點? – jay

+0

可能重複的[簡單的方法來導出一個SQL表,而無需訪問rver或phpMyADMIN](http://stackoverflow.com/questions/81934/easy-way-to-export-a-sql-table-without-access-to-the-server-or-phpmyadmin) –

回答

0
<form class="elegant-aero" action="backup.php"> 

     <center> 
     <h1>SQL Server Backup And Restore 

    </h1> 
    <style> 
    .btn{ 
     width:80px; 
     height:30px; 
     background:#0B49D8; 
     color:#FFFFFF; 

    } 
    </style> 

    <label> 

     <input id="name" type="submit" name="backup" class="btn" value="Backup" /> 


    </label>  

     </form> 

** PHP代碼如下。你可以改變擴展.SQL或.csv和更改要保存備份文件的路徑全髖關節置換。目前的備份保存在你不遠的地方你的文件代碼文件是位置.dabase備份文件名稱是股票,您可以更改**

<?php 
error_reporting(E_ALL^E_DEPRECATED); 

error_reporting(error_reporting() & ~E_NOTICE); 
backup_tables('localhost','root','','stock1'); 

/* backup the db OR just a table */ 
function backup_tables($host,$user,$pass,$name,$tables = '*') 
{ 

    $link = mysql_connect($host,$user,$pass); 
    mysql_select_db($name,$link); 

    //get all of the tables 
    if($tables == '*') 
    { 
     $tables = array(); 
     $result = mysql_query('SHOW TABLES'); 
     while($row = mysql_fetch_row($result)) 
     { 
      $tables[] = $row[0]; 
     } 
    } 
    else 
    { 
     $tables = is_array($tables) ? $tables : explode(',',$tables); 
    } 

    //cycle through 
    foreach($tables as $table) 
    { 
     $result = mysql_query('SELECT * FROM '.$table); 
     $num_fields = mysql_num_fields($result); 

     $return.= 'DROP TABLE '.$table.';'; 
     $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table)); 
     $return.= "\n\n".$row2[1].";\n\n"; 

     for ($i = 0; $i < $num_fields; $i++) 
     { 
      while($row = mysql_fetch_row($result)) 
      { 
       $return.= 'INSERT INTO '.$table.' VALUES('; 
       for($j=0; $j < $num_fields; $j++) 
       { 
        $row[$j] = addslashes($row[$j]); 
        $row[$j] = ereg_replace("\n","\\n",$row[$j]); 
        if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; } 
        if ($j < ($num_fields-1)) { $return.= ','; } 
       } 
       $return.= ");\n"; 
      } 
     } 
     $return.="\n\n\n"; 
    } 

    //save file 
    $handle = fopen('stock'.'.csv','w+'); 
    fwrite($handle,$return); 
    fclose($handle); 
    if($handle) 
{ 
//$msg="Insert Successfully!!"; 
echo "<script>alert('Backup success');document.location='home.php'</script>"; 
?> 

<?php 
} 
else 
{ 

//$errmsg=" Insert not success!!"; 
     echo "<script>alert('Backup not success');document.location='home.php'</script>"; 

} 
} 
?> 
0

更簡潔快捷的選項是使用INFILE/OUTFILE。所以在PHP中調用下面的SQL查詢...

$db_conn = mysql_connect('localhost','root',''); 
mysql_select_db('stackoverflow',$db_conn); 

$q = " 
    SELECT * FROM mytable INTO OUTFILE '/mytable.csv' 
    FIELDS TERMINATED BY ',' 
    ENCLOSED BY '\"' 
    LINES TERMINATED BY '\n'; 
"; 

$result = mysql_query($q,$db_conn); 

這是隨後從數據導入的最快方法。

+0

我似乎得到一個錯誤:'解析錯誤:語法錯誤,意外''線終結''' (T_CONSTANT_ENCAPSED_STRING)in the the line was'$ thequery =「SELECT * FROM members INTO OUTFILE'/test.csv'FIELDS TERMINATED BY','ENCLOSED BY'」'LINES TERMINATED BY'\ n';';' ' – jay

+0

@jay我已經更新了它,現在它已經100%測試過了,請原諒使用mysql_connect它不是這個腳本的焦點,運行$ q is。也是這個輸出到windows的驅動器根目錄 – Barry

+0

我沒有得到任何錯誤,但我沒有看到任何mytable.csv文件在服務器的目錄或任何地方在我的電腦:D – jay

0

經過結合和測試一系列選項後,我能夠解決它。我在這裏分享,以便那些遇到我的困境的人不會像我那樣艱難:(

當用戶點擊EXPORT按鈕時,Chrome瀏覽器會自動下載一個CSV文件,其中包含數據庫的副本字段名。

<?php 
    include('/connectme.php'); 

    $thequery = "SELECT * FROM members"; 
    $result = mysqli_query($conn,$thequery); 

    $file = fopen("php://output","w"); 

    header('Content-Type: text/csv'); 
    header('Content-Disposition: attachment; filename="exported.' . date("Y.m.d") . '.csv"'); 
    header('Pragma: no-cache');  
    header('Expires: 0'); 

    $emptyarr = array(); 
    $fieldinf = mysqli_fetch_fields($result); 
     foreach ($fieldinf as $valu) 
    { 
     array_push($emptyarr, $valu->name); 
     } 
    fputcsv($file,$emptyarr); 

    while($row = mysqli_fetch_assoc($result)) 
    { 
     fputcsv($file,$row); 
    } 
    fclose($file); 

    mysqli_free_result($result); 
    mysqli_close($conn); 
?>