SQL Server — почему этот код не запускается в PHP, но отлично работает в Management Studio

Я пытаюсь сделать резервную копию и восстановить базу данных из более старой резервной копии.

Я использую этот код SQL для этого:

ALTER DATABASE [UKBYTEDB] SET RECOVERY FULL;

BACKUP DATABASE [UKBYTEDB] TO DISK = 'C:/xampp/htdocs/UKBYTEDB/dev/UKBYTEDB- 2017-02-20.Bak' WITH FORMAT, MEDIANAME = 'Z_SQLServerBackups', NAME = 'Full Backup of [UKBYTEDB] - 2017-02-20';

ALTER DATABASE UKBYTEDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

BACKUP LOG UKBYTEDB TO DISK = 'C:/xampp/htdocs/UKBYTEDB/dev/UKBYTEDB-LOG- 2017-02-20.Bak' WITH NORECOVERY
RESTORE DATABASE [UKBYTEDB] FROM DISK = 'C:/xampp/htdocs/UKBYTEDB/dev/UKBYTEDB-defualt.Bak' WITH RECOVERY;

Мой PHP-код с подключением к Master DB:

$RUN = sqlsrv_query($masterDBlink,$RestoreDefualtDB);
if($RUN === false)
{
die(print_r(sqlsrv_errors()));
}
else
{
echo 'Done!';
}

Тогда я получаю эту ошибку:

Array ( [0] => Array ( [0] => 01000 [SQLSTATE] => 01000 [1] => 4035 [code] => 4035 [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Processed 2304 pages for database 'UKBYTEDB', file 'wardobsliveisle' on file 1. [message] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Processed 2304 pages for database 'UKBYTEDB', file 'wardobsliveisle' on file 1. ) ) 1

0

Решение

Если код работает в Management Studio и у вас хорошее соединение, я предлагаю вам поставить NOCOUNT перед вашим первым утверждением и посмотреть, работает ли он:

SET NOCOUNT ON
ALTER DATABASE [UKBYTEDB]...
0

Другие решения

Наконец-то нашел то, что заставило его работать:

добавить этот код сразу после подключения

sqlsrv_configure( "WarningsReturnAsErrors", 0 );

затем добавьте это после запроса резервного копирования и восстановления

 usleep(600);
set_time_limit(2000);

затем выполните этот запрос в конце кода

$sql = "USE [UKBYTEDB]";
$stmt = sqlsrv_query($masterDBlink, $sql);
0

У меня была именно эта проблема — запрос не работал в PHP, но запрос работал в SQL Management Studio. Оказалось, что хранимая процедура, которую я выполнял, содержала пару операторов PRINT, оставшихся после отладки. Как только я удалил эти заявления, это сработало.

0