Đây là một giải pháp phù hợp với tôi:
- thực thi
sqlsrv_configure("WarningsReturnAsErrors", 0);
để thay đổi cài đặt xử lý lỗi. - loại bỏ
WITH STATS = 1
từBACKUP DATABASE
tuyên bố.
Tôi có thể tái tạo sự cố này bằng một trường hợp thử nghiệm sử dụng Apache 2.4, PHP 7.1.12 và Microsoft PHP Driver cho SQL Server (php_sqlsrv_71_ts_x86.dll, phiên bản 4.3). Sự khác biệt duy nhất là ví dụ sử dụng Trình điều khiển SQLSRV (Tôi không thể sử dụng Trình điều khiển PDO_SQLSRV trong môi trường thử nghiệm của mình).
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]
Đừng quên cấp các quyền cần thiết cho thư mục 'D:\ Backup'.