使用php构建表备份mysql数据库确定但表中没有数据

时间:2016-06-23 09:29:35

标签: php mysql backup

我试图使用php文件备份我的mysql数据库,以便将.gz文件保存到我的服务器上。除文件外,它看起来非常好,不包含任何数据..

除了这一项重要的事情之外,所有生成的文件看起来都是正确的!

E.g。这是代码

生成的一行示例
INSERT INTO ticket_sold VALUES("","","","","","","","","","","");

它适用于所有表格。

我已经基于本教程的代码,所以它应该可以工作:https://davidwalsh.name/backup-mysql-database-php

这是我的代码:

function backup_database_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 each table and format the data
    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] = preg_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";
}

我认为这与代码的这个区域有关,但它超出了我的范围:

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] = preg_replace("n","\n",$row[$j]);
                if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
                if ($j<($num_fields-1)) { $return.= ','; }
            }

就像我说的那样,其余部分效果很好,我对整个事情感到非常兴奋,但只需要最后一点工作。

是的,我知道我应该使用PDO,一旦我知道这将有用,我就会这样做。

1 个答案:

答案 0 :(得分:0)

当我的朋友告诉我如何在phpmysql中设置权限时,我最后和EXEC声明一起去了。

谢谢你的时间。