0

I am creating a Module in which I have to export some of the tables from the db as sql file. I am using the reference code from Export MySQL database using PHP only. 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. 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. 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;
} 
?>
Community
  • 1
  • 1
Mukesh Joshi
  • 2,784
  • 4
  • 24
  • 34

1 Answers1

1

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

 select * from table_name

A good way will be to use the exec command in php

$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

Danyal Sandeelo
  • 12,196
  • 10
  • 47
  • 78
  • I just want to export some of the tables from database which has some conditions, such as only that data will be exported that belongs to the logged in user, for this i have to use conditions in the query. Can I do this with this command. – Mukesh Joshi Sep 16 '15 at 09:07
  • yes, you can do that as well ...read this one http://dba.stackexchange.com/questions/9306/how-do-you-mysqldump-specific-tables – Danyal Sandeelo Sep 16 '15 at 09:08
  • If you can help me on the above code by me, how can i implement that way in my function in Symfony. Thanks – Mukesh Joshi Sep 16 '15 at 11:29