PHP - Sistema de respaldo de bases de datos en SQL_Server a archivos .txt

 
Vista:

Sistema de respaldo de bases de datos en SQL_Server a archivos .txt

Publicado por Justo Antonio (1 intervención) el 20/09/2018 18:07:18
¡Buen día!
Estoy desarrollando un sistema de respaldos que lea cualquier base de datos en SQL_Server y descargue la información contenida en los campos en un archivo .txt para almacenarlos en la nube y así poder acceder a ellos desde cualquier ubicación.
Para tablas en especifico, de la que conozco su estructura logro el cometido pero para aquellas que no conozco la estructura no logro integrar la lista de los nombres de los campos en la instrucción de selección.
Estoy haciendo algo así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
//header('Content-Type: text/plain');
//header('Content-Disposition: attachment; filename="generado.txt"');
$ServerName = "nombre del servidor";
$connectionInfo = array("Database"=>"nombre de la base de datos", "UID"=>"nombre del usuario", "PWD"=>"contraseña", "CharacterSet"=>"UTF-8");
$con = sqlsrv_connect($ServerName,$connectionInfo);
$DB = 'nombre de la tabla';
$sql_seleccion = "SELECT * FROM ".$DB;
$lista = '';
if($con){
    $sql = "SELECT c.name FROM sys.columns c JOIN sys.tables t ON c.object_id = t.object_id WHERE t.name = 'SAFACT'";
    $sql_cuenta = "SELECT COUNT(*) As Cuenta FROM sys.columns c JOIN sys.tables t ON c.object_id = t.object_id WHERE t.name = 'SAFACT'";
    $stmt = sqlsrv_query($con, $sql_cuenta);
    if( $stmt === false) {
        die(print_r( sqlsrv_errors(), true));
    }
    while($registros = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)) {
        $indice = $registros['Cuenta'];
    }
    $stmt = sqlsrv_query($con, $sql);
    if( $stmt === false) {
        die( print_r( sqlsrv_errors(), true) );
    }
    while($row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)){
        foreach($row as $indice=>$valor){
            $campo = $row[$indice];
            $lista .= '$lista'.'['.chr(39).$campo.chr(39).'],';
            //echo  $campo.': --> '.$lista.'<br>';
            //$seleccion = $campo.$lista;
        }
        //print_r($lista);
        $sql_txt = "SELECT * FROM ".$DB;
        $stmt = sqlsrv_query( $con, $sql_txt );
        if( $stmt === false) {
            die( print_r( sqlsrv_errors(), true) );
        }
        while($lista = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
            print_r($lista); //.chr(13).chr(10)
        }
    }
    $stmt = sqlsrv_query( $con, $sql_seleccion );
    if( $stmt === false) {
        die( print_r( sqlsrv_errors(), true) );
    }
    sqlsrv_free_stmt( $stmt);
} else {
        echo "¡Fallo en Conexión!";
}
?>

Si alguien tiene una noción de como puedo resolver esto, les agradecerías.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 1.071
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Sistema de respaldo de bases de datos en SQL_Server a archivos .txt

Publicado por Yamil Bracho (888 intervenciones) el 20/09/2018 18:25:08
Tendrias que ller la metadata de la base de datos que deseas procesar para que asi te de la lista de tablas.
De alli puede stener varios obejtos de BD, como Stored procs, functions, triggers, indices, etc.
Una vez que tenga la lista de las tablas puede shacer un SELECT * from laTabla o buscar los campos programaticamente (igualmente en la metadata).
Lo otro que puedes hacer es tomar la data despues de la mmaada a PHP, quizas un getAll y entonces guardarla en el archivo txt en formato JSON...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar