简体   繁体   English

仅使用Symfony导出MySQL数据库表

[英]Export MySQL database tables using Symfony only

I am creating a Module in which I have to export some of the tables from the db as sql file. 我正在创建一个模块,在其中我必须将数据库中的某些表导出为sql文件。 I am using the reference code from Export MySQL database using PHP only . 我正在使用仅使用PHP导出MySQL数据库中的参考代码。 I want to use it in my executeFunction but it has some Core PHP functions which are not working when I put then in my executeFunction. 我想在我的executeFunction中使用它,但是它有一些Core PHP函数,当我将其放入executeFunction时不起作用。 But these work when I place this script in Source Files and execute the file. 但是,当我将此脚本放在“源文件”中并执行文件时,这些方法就起作用了。 I have tried to find the alternate functions of these in Symfony but not able to do this. 我试图在Symfony中找到这些功能的替代功能,但无法做到这一点。 If someone could help me on this part. 如果有人可以在这方面帮助我。 My code is as: 我的代码是:

 function Export_Database($host,$user,$pass,$name,$tables=false, $backup_name=false )
{

    $conn = Doctrine_Manager::connection();

    $rus;
    $rus["Users"] = "tbl_users";
    $rus["Placemaster"] = "placemaster";

    foreach($rus as  $key => $value)
    {   
        $result = $conn->fetchAll('SELECT * FROM '.$value);

        $fields_amount  =   $result->field_count;  // Gives No Value
        $rows_num       =   $mysqli->affected_rows;     // Gives No Value
        $res            =   $conn->execute('SHOW CREATE TABLE '.$value); // Gives something else which the reference code gives.
        $TableMLine     =   $res->fetch_row(); 
        $content        =   (!isset($content) ?  '' : $content) . "\n\n".$TableMLine[1].";\n\n";
        for ($i = 0, $st_counter = 0; $i < $fields_amount;   $i++, $st_counter=0) 
        {
            while($row = $result->fetch_row())  
            { //when started (and every after 100 command cycle):
                if ($st_counter%100 == 0 || $st_counter == 0 )  
                {
                        $content .= "\nINSERT INTO ".$table." VALUES";
                }
                $content .= "\n(";
                for($j=0; $j<$fields_amount; $j++)  
                { 
                    $row[$j] = str_replace("\n","\\n", addslashes($row[$j]) ); 
                    if (isset($row[$j]))
                    {
                        $content .= '"'.$row[$j].'"' ; 
                    }
                    else 
                    {   
                        $content .= '""';
                    }     
                    if ($j<($fields_amount-1))
                    {
                            $content.= ',';
                    }      
                }
                $content .=")";
                //every after 100 command cycle [or at last line] ....p.s. but should be inserted 1 cycle eariler
                if ( (($st_counter+1)%100==0 && $st_counter!=0) || $st_counter+1==$rows_num) 
                {   
                    $content .= ";";
                } 
                else 
                {
                    $content .= ",";
                } 
                $st_counter=$st_counter+1;
            }
        } $content .="\n\n\n";
    }
    //$backup_name = $backup_name ? $backup_name : $name."___(".date('H-i-s')."_".date('d-m-Y').")__rand".rand(1,11111111).".sql";
    $backup_name = $backup_name ? $backup_name : $name.".sql";
    header('Content-Type: application/octet-stream');   
    header("Content-Transfer-Encoding: Binary"); 
    header("Content-disposition: attachment; filename=\"".$backup_name."\"");  
    echo $content; exit;
} 
?>

Well instead of doing it like that, you can run a system command on the back-end to create a backup for you, move the file in the folder and download it because you do not know the database size.. 嗯,与其那样做,不如在后端上运行系统命令来为您创建备份,将文件移动到文件夹中并下载,因为您不知道数据库的大小。

The applications servers have memory limit, you can't exceed that, your code won't be able to load the data of around 1 GB even because you are doing it like 应用程序服务器具有内存限制,您不能超过该限制,即使您这样做,代码也无法加载大约1 GB的数据

 select * from table_name

A good way will be to use the exec command in php 一个好方法是在php中使用exec命令

$command = 'mysqldump -uUSER -pPASSWORD database_name> /path/to/file.sql'
exec($command);

move the file to the app folder and download it using php's move file command 将文件移动到应用程序文件夹并使用php的move file命令下载

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM