首页 > 解决方案 > 使用 PHP 备份 SQL Server

问题描述

我想使用 PHP 脚本在 SQL Server 2017 上备份数据库,并将文件放在网络服务器 (IIS) 上的文件系统中。

我的 PHP 脚本:

$sql = "BACKUP DATABASE BGEDB TO DISK='\\\WWWDEV02\WWWDEV02-BGEDB\backups\BGEDB.bak'";
// $sql = BACKUP DATABASE BGEDB TO DISK='\\WWWDEV02\WWWDEV02-BGEDB\backups\BGEDB.bak'
$stmt = sqlsrv_query($conn, $sql);
if ($stmt) {
  echo "Statement executed.<br>\n";
}
else {
  echo "Error in statement execution.\n";
  die( print_r( sqlsrv_errors(), true));
}
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);

结果:

语句执行错误。Array ( [0] => Array ( [0] => 01000 [SQLSTATE] => 01000 [1] => 4035 [code] => 4035 [2] => [Microsoft][ODBC Driver 17 for SQL Server][ SQL Server]536 Seiten wurden für die BGEDB-Datenbank, Datei "BGEDB" für Datei 2, verarbeitet. [message] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]536 Seiten wurden für die BGEDB-Datenbank , Datei "BGEDB" für Datei 2, verarbeitet. ) )

在 SQL Server Management Studio 中使用 $sql 中的命令没有问题:

BACKUP DATABASE BGEDB TO DISK='\\WWWDEV02\WWWDEV02-BGEDB\backups\BGEDB.bak'

请问有人可以帮我解决我的问题吗?是因为 SQL Server 和网络服务器之间的用户权限吗?还是我在转义 PHP 中的反斜杠时做错了什么?

编辑:

我在 SQL Server 中编写了一个名为 BGEDB_Backup 的存储过程:

CREATE PROCEDURE BGEDB_Backup 
AS
BEGIN
    SET NOCOUNT ON;
    BACKUP DATABASE BGEDB TO DISK='\\WWWDEV02\WWWDEV02-BGEDB\backups\Datenbank_per_Skript\BGEDB1.bak'
END
GO

当我在 Management Studio 中运行它时,备份文件将被写入 IIS-Webserver 的文件系统中。现在我尝试在我的 php 中执行存储过程:

$sql = "EXEC BGEDB_Backup";
echo "SQL ---> ".$sql."<br /><br />";
$stmt = sqlsrv_prepare($conn, $sql);
if ($stmt) {
  echo "Statement executed.<br>\n";
}
else {
  echo "Error in statement execution.\n";
  die( print_r( sqlsrv_errors(), true));
}

不幸的是,网络服务器的文件系统中没有任何反应......

谢谢您的帮助!

标签: phpsqlsql-serverdatabase-backupssqlsrv

解决方案


推荐阅读