Mysql дамп средствами php без shell

Встречаются ситуации, когда по каким-либо причинам у нас не работает команда mysqldump через exec.
Из такой ситуации можно выкрутится следующим кодом:
<?php

/*mysql_connect, mysql_select_db..Подключились к бд*/

function dump_sql($dump_dir)
{
$tables = "SHOW TABLES"; // Получаем список таблиц
$res = mysql_query($tables) or die( "Ошибка при выполнении запроса: ".mysql_error() );
while( $table = mysql_fetch_row($res) )
{
    $fp = fopen( $dump_dir."/".$table[0].".sql", "a" ); // Sql файл таблицы (таблица.sql)
    if ( $fp )
    {
        $query = "TRUNCATE TABLE `".$table[0]."`;\n"; // Чистим таблицу (будет в дампе)
        $un=false;
        fwrite ($fp, $query);
        $rows = 'SELECT * FROM `'.$table[0].'`'; // Получаем данные из таблицы
        $r = mysql_query($rows) or die("Ошибка при выполнении запроса: ".mysql_error());
        while( $row = mysql_fetch_row($r) )
        {
            $query = "";
            foreach ( $row as $field )
            {
                if ( is_null($field) )
                    $field = "NULL";
                else
                    $field = "'".mysql_escape_string( $field )."'";
                if ( $query == "" )
                    $query = $field;
                else
                    $query = $query.', '.$field;
            }
            $query = "INSERT INTO `".$table[0]."` VALUES (".$query.");\n"; // Вставка данных (будет в дампе)
            $un=true;
            fwrite ($fp, $query);
        }
        fclose ($fp);
        if (!$un)
        unlink($dump_dir."/".$table[0].".sql");
    }
}
}

# Вызываем функцию указав папку в которую сохранять дампы
dump_sql('./sql_dumps');
?>


Недостатки метода:
1. Отсутствует create table
2. Избытычность insert into запросов

Преимущества:
1. Работает везде где есть php
2. Не требует знаний shell

п.с.: оба недостатка исправляются прямыми руками кодера =)