Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Php appelant le script de base de données de sauvegarde sqlserver, fichier de sauvegarde créé puis supprimé

Voici une solution qui fonctionne pour moi :

  • exécutez sqlsrv_configure("WarningsReturnAsErrors", 0); pour modifier les paramètres de gestion des erreurs.
  • supprimer WITH STATS = 1 à partir de BACKUP DATABASE déclaration.

Je suis capable de reproduire ce problème avec un cas de test utilisant Apache 2.4, PHP 7.1.12 et le pilote Microsoft PHP pour SQL Server (php_sqlsrv_71_ts_x86.dll, version 4.3). La seule différence est que l'exemple utilise le pilote SQLSRV (je ne peux pas utiliser le pilote PDO_SQLSRV dans mon environnement de test).

PHP

<?php
    sqlsrv_configure("WarningsReturnAsErrors", 0);

    // Connection
    $serverName = "127.0.0.1\instance,1433";
    $connectionInfo = array(
        "UID"=>"user",
        "PWD"=>"password",
        "Database"=>"ProdDB"
    );
    $conn = sqlsrv_connect($serverName, $connectionInfo);
    if ($conn === false) {
        echo "Unable to connect.</br>";
        die(var_export(sqlsrv_errors(), true));
    }

    // Backup database
    $strSQL = file_get_contents("archdata.sql");
    if (!empty($strSQL)) {
        $query = sqlsrv_query($conn, $strSQL);
        if ($query === false) {
            die(var_export(sqlsrv_errors(), true));
        } else {
            sleep(5);  
            echo "Success";
        }
    }   
?>

T-SQL (archdata.sql)

declare 
    @path varchar(100),
    @fileDate varchar(20),
    @fileName varchar(140)

SET @path = 'd:\Backup\'   
SELECT @fileDate = CONVERT(VARCHAR(20), GETDATE(), 112)  
SET @fileName = @path + 'ProdDB_' + @fileDate + '.BAK' 
BACKUP DATABASE ProdDB TO [email protected]

N'oubliez pas de donner les droits nécessaires au dossier 'D:\Backup'.