2013-05-28 36 views
0

選擇我想備份表由表從使用mysqldump PHP MySQL的DATABSE ,,,,使用複選框列表如何通過表備份mysql數據庫表用PHP

我的表展。

如果表中的列表檢查了所有然後我所有的表備份

如果表中的一個,兩個,三個列表等檢查了我的表檢查備份

這是我的代碼:

<?php 
    include "config/conn.php"; 
    echo "<h1>Database name: ".$db."</h1></br>"; 
    echo "list of Tabel:"; 
    $query = "SHOW TABLES"; 
    $hasil = mysql_query($query); 

    echo "<form method='post' action='db/backupAction.php'>"; 
    echo "<table>"; 
    while ($data = mysql_fetch_row($hasil)) 
    { 
     echo "<tr><td><input type='checkbox' name='tabel[]' value='".$data[0]."'></td><td>".$data[0]."</td></tr>"; 
    } 
    echo "</table><br>"; 
    echo "<input type='submit' name='submit' value='Backup Data' class='btn'>"; 
    echo "</form>"; 

?> 

這是我backupAction.php

<?php 
include "config/conn.php"; 

$tabel = $_POST['tabel']; 


$listTabel = ""; 
foreach($tabel as $namatabel) 
{ 
    $listTabel = $namatabel ; 
} 

$command = "C:\xampp\Mysql\bin\mysqldump --user".$user." --password=".$pass." ".$db." ".$listTabel."\>".$db.".sql"; 

exec($command); 


header("Content-Disposition: attachment; filename=".$db.".sql"); 
header("Content-type: application/download"); 

//$fp = fopen ($db.".sql", 'r'); 
//$content = fread($fp, filesize($db.".sql")); 
//fclose($fp); 

//echo $content; 

//exit; 
?> 

我的結果文件.SQL文件爲空

爲什麼?

+0

你可以重複了'$ command'?當它從命令行運行時它是否工作? – andrewsi

+0

'「\>」'在您的$命令中似乎無效,請回復它。 – Robert

+0

我的結果回聲是'數組',如果我的輸入名稱是我更改name ='tabel'我的結果是表名,但結果是相同的空或空白 – Ash

回答

1

上面的代碼有兩個問題。首先,應該確保你在mysqldump命令中分隔用戶。

mysqldump --user=".$user." 

在爲了創建listTabel字符串而進行的每個循環中,最後都沒有添加空格。此外,沒有必要使用外觀來連接字符串,您可以使用use PHP's built in implode function。其次,您應該在開始回顯您將要備份的所有表名稱之前添加--tables參數。

最後,在PHP中「\」是一個特殊的轉義字符。您可能需要使用兩個,或將這些命令包裝在單引號中。您不需要轉義「>」字符。

從本質上講,該命令將是這樣的:

$listTabel = ''; 
if (is_array($tabel)) 
    $listTabel = implode(" ", $tabel); 

$executable = 'C:\xampp\Mysql\bin\mysqldump '; 
$command = $executable; 
if (isset($user) && $user != '') 
    $command .= '--user='.$user.' '; 
if (isset($pass) && $pass != '') 
    $command .= '--password='.$pass.' '; 

$command .= $db 

if (isset($listTabel) && $listTabel != '') 
    $command .=' --tables'.$listTabel; 

$command .= ' > '.$db.'.sql'; 
+0

相同,我的結果爲空或空白 – Ash

+0

請讓我們知道什麼 echo $ command; 退出; 輸出剛剛在$命令= ... – timgws

+0

我改變使用implode我的結果是implode()[function.implode]:無效參數傳遞....... – Ash