为什么此代码无法在PHP中运行,但在Management Studio中运行正常

时间:2017-02-20 14:03:14

标签: php sql-server ssms database-backups database-restore

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

我使用此SQL代码执行此操作:

a[a.apply(lambda x: b.str.contains(x).any())]

#0    a
#1    b
#dtype: object

我的PHP代码与Master DB的连接:

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;

然后我收到此错误:

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

3 个答案:

答案 0 :(得分:0)

如果代码在Management Studio中运行且您的连接良好,我建议您在第一个语句之前输入NOCOUNT,看看它是否有效:

SET NOCOUNT ON
ALTER DATABASE [UKBYTEDB]...

答案 1 :(得分:0)

终于找到了让它发挥作用的东西:

在连接后立即添加此代码

sqlsrv_configure( "WarningsReturnAsErrors", 0 );

然后在备份和恢复查询后添加此内容

 usleep(600);
 set_time_limit(2000);

然后在代码末尾运行此查询

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

答案 2 :(得分:0)

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