使用php备份mysql数据库可以构建表,但表中没有数据

使用php备份mysql数据库可以构建表,但表中没有数据,php,mysql,backup,Php,Mysql,Backup,我正在尝试使用php文件备份mysql数据库,以将.gz文件保存到我的服务器上。除了文件不包含任何数据外,它看起来非常好 除此之外,所有生成的文件看起来都是正确的 例如,下面是代码生成的一行的示例 INSERT INTO ticket_sold VALUES("","","","","","","","","","",""); 它对所有表都这样做 我基于本教程编写了代码,因此应该可以使用: 这是我的密码: function backup_database_tables($host,$user,

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

除此之外,所有生成的文件看起来都是正确的

例如,下面是代码生成的一行的示例

INSERT INTO ticket_sold VALUES("","","","","","","","","","","");
它对所有表都这样做

我基于本教程编写了代码,因此应该可以使用:

这是我的密码:

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";
}
函数备份\数据库\表($host、$user、$pass、$name、$tables)
{
$link=mysql\u connect($host、$user、$pass);
mysql\u select\u db($name,$link);
//拿到所有的桌子
如果($tables=='*'))
{
$tables=array();
$result=mysql_查询('SHOW TABLES');
while($row=mysql\u fetch\u row($result))
{
$tables[]=$row[0];
}
}
其他的
{
$tables=is_数组($tables)?$tables:explode(',',$tables);
}
//循环浏览每个表并格式化数据
foreach($tables作为$table)
{
$result=mysql\u查询('SELECT*FROM'.$table);
$num\u fields=mysql\u num\u fields($result);
$return.='DROP TABLE'.$TABLE'.;';
$row2=mysql_fetch_行(mysql_查询('SHOW CREATE TABLE'.$TABLE));
$return.=“\n\n”。$row2[1]。”;\n\n”;
对于($i=0;$i<$num_字段;$i++)
{
while($row=mysql\u fetch\u row($result))
{
$return.='INSERT INTO'.$table.'值(';

对于($j=0;$j),当我的朋友向我展示如何在phpmysql中设置priviledges时,我最终使用了and EXEC语句


谢谢您的时间。

是的,您应该使用PDO,因为这种php代码已被弃用,但这并不意味着它是问题的解决方案。到底是什么问题?您正在执行一个失败的多重查询。这一切都非常糟糕。创建的.sql文件很好,但所有插入都是空的,例如:INSERT INTO ticket\u sell VALUES(“,”“,”“,”“,”“,”“,”“,”“,”“,”“,”“,”“,”“,”);如果您只是尝试用当前结构备份数据库,那么您应该按照
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.= ','; }
            }