我有一个调用sqlserver备份脚本的php。如果直接从SSMS执行这个脚本,它会成功地创建备份。但是,当通过php调用时,我可以看到在目标文件夹中创建的文件,但似乎当php完成时,文件也被删除了。我在哪里做错了呢?
PHP程式码:
$strSQL = file_get_contents("archdata.sql");
if (!empty($strSQL)) {
$query=$conn->prepare($strSQL);
if ($query->execute()) {
sleep(5);
echo "1";
} else {
echo "Error: " . $strSQL;
}
}
archdata.sql:
SET @path = 'C:\Data\backups\'
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112)
SET @fileName = @path + 'ProdDB _' + @fileDate + '.BAK'
BACKUP DATABASE ProdDB TO DISK=@fileName WITH STATS = 1
1条答案
按热度按时间crcmnpdw1#
这里有一个解决方案,对我来说很有效:
sqlsrv_configure("WarningsReturnAsErrors", 0);
以更改错误处理的设置。BACKUP DATABASE
语句中删除WITH STATS = 1
。我可以通过使用Apache 2.4、PHP 7.1.12和Microsoft PHP Driver for SQL Server(php_sqlsrv_71_ts_x86.dll,版本4.3)的测试用例重现此问题。唯一的区别是示例使用SQLSRV驱动程序(我不能在我的测试环境中使用PDO_SQLSRV驱动程序)。
PHP语言
T-SQL(原始数据. sql)
不要忘记给予对“D:\Backup”文件夹的必要权限。