php - 使用 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));
}
不幸的是,网络服务器的文件系统中没有任何反应......
谢谢您的帮助!
解决方案
推荐阅读
- c# - 将 JSON 转换为自己的类型会导致 null 对象
- powershell - Powershell:-或在while循环中
- node.js - 如何为我的 API 设置 IP 白名单功能?
- azure-active-directory - 创建 CNAME 后的 AADSTS50011
- python - 为什么 Python 字典的行为类似于对象引用?
- php - Laravel /航海者问题
- javascript - JS - 对对象数组进行排序
- c++ - 如何将 Xilinx HLS 流的一部分传输到另一个函数?
- autodesk-forge - Navis 和模型协调之间的链接无法正常工作,Glue Classic 可以正常工作
- linkedin - LinkedIn 营销 API 无法处理隧道的 BATCH_GET