Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这段代码无法在PHP中运行,但在ManagementStudio中运行良好_Php_Sql Server_Ssms_Database Backups_Database Restore - Fatal编程技术网

为什么这段代码无法在PHP中运行,但在ManagementStudio中运行良好

为什么这段代码无法在PHP中运行,但在ManagementStudio中运行良好,php,sql-server,ssms,database-backups,database-restore,Php,Sql Server,Ssms,Database Backups,Database Restore,我正在尝试从较旧的备份中备份和还原数据库 我使用以下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 [U

我正在尝试从较旧的备份中备份和还原数据库

我使用以下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;
连接到Master DB的我的PHP代码:

$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

如果代码在ManagementStudio中运行,并且您的连接良好,我建议您在第一条语句之前不加计数,看看它是否有效:

SET NOCOUNT ON
ALTER DATABASE [UKBYTEDB]...

终于找到了让它发挥作用的方法:

在连接后立即添加此代码

sqlsrv_configure( "WarningsReturnAsErrors", 0 );
然后将其添加到备份和还原查询之后

 usleep(600);
 set_time_limit(2000);
然后在代码末尾运行此查询

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

我有一个确切的问题——查询在PHP中不起作用,但在SQL Management Studio中起作用。事实证明,我正在执行的存储过程中有两个PRINT语句,它们是调试遗留下来的。一旦我删除了这些语句,它就工作了。

这不是一条错误消息。@JayBlanchard你知道它失败并返回false的原因吗?我用NOCOUNT测试了它,但仍然显示相同的输出。我在语句之前尝试使用MASTER,返回值为TRUE而不是false没有错误,但是备份文件没有保存。我已经测试了连接,可以插入、删除和选择,只是备份失败了。