0

mysqldumpを使ってphpでデータベースmysqlからテーブル単位でバックアップしたい、、、、

私のテーブルは、チェックボックスを使用してリストに表示されます。

テーブルのリストがすべてをチェックした場合、すべてのテーブルのバックアップ

テーブル 1、2、3 などのリストが、テーブル チェック済みバックアップをチェックした場合

これは私のコードです:

<?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はnullです

どうして???

4

1 に答える 1

1

上記のコードには 2 つの問題があります。まず、mysqldump コマンドでユーザーを分離する必要があります。

  mysqldump --user=".$user."

listTabel 文字列を作成するために実行している for each ループでは、最後にスペースを追加していません。さらに、文字列を連結するために look を使用する必要はありません。PHP に組み込まれている implode 関数を使用できます。

次に、バックアップするすべてのテーブル名のエコーを開始する前に、 --tables 引数を追加する必要があります。

最後に、PHP では「\」は特殊なエスケープ文字です。2 つ使用するか、コマンドを一重引用符で囲む必要があります。">" 文字をエスケープする必要はありません。

基本的に、コマンドは次のようになります。

$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';
于 2013-05-28T13:38:00.047 に答える