首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用php备份和还原SQL server数据库

问使用php备份和还原SQL server数据库
EN

Stack Overflow用户
提问于 2017-01-25 16:39:46
回答 1查看 2.4K关注 0票数 2

我想做一个简单的网站,它可以打开、显示和运行sql server查询,就像从sql server管理工作室执行查询一样。它已经可以执行一些查询,如select (然后显示为表)、insert、update、delete,包括当我使用where/group/order语句时。但是,当我使用查询对数据库进行备份时:

代码语言:javascript
复制
BACKUP DATABASE 'mydb' TO DISK='pathname\filename.bak' WITH INIT/NOINIT

它只能备份一次数据库,然后当我使用相同的输入执行查询时,它没有错误,但也没有执行过程中产生的文件备份。我不知道为什么,但是当我使用来自sql server管理演播室的相同查询执行(具有不同的文件名,使前一个文件不会被覆盖)时,它执行时不会出错,并且会创建另一个文件备份。

代码: php

代码语言:javascript
复制
$sql = "ALTER DATABASE $db_name SET RECOVERY FULL"; 
$stmt = sqlsrv_query($conn, $sql); 
if($stmt === false) 
{ 
die(print_r(sqlsrv_errors())); 
} 
else 
{ 
echo "Recovery model set to FULL"; 
}
if($_POST['type']=="Backup Full")
{
$query="BACKUP DATABASE $db_name TO DISK='$file\\$filename.bak' WITH
NOINIT;";
    echo "<br>".$query."<br>";
    $stat=sqlsrv_query($conn,$query);
    if($stat == false)
    {
        echo "Error to retrieve info, THIS IS THE ERROR : <br />";
        die(print_r(sqlsrv_errors()));
    }
    else
    {
        echo "Success!";
    }
    }
  1. 它创建一个新文件.bak,其中填充了我的数据库备份。
  2. 它返回'if‘内的错误。
  3. 当我尝试用不同的文件名再次运行代码时,它没有创建更多的.bak文件。
  4. 当我重新启动我的PC时,一切恢复正常(再次创建另一个.bak )
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-06 11:11:25

似乎有一个解决方案,这里。您的问题也发生在我身上--但在我的例子中,有时创建了备份,有时没有。我猜想,当php执行时,备份进程会失败,并且在结束备份进程之前就会退出,因此,它会在备份进程中间终止连接。我意识到要执行非查询类型的sql序列,必须使用指令sqlsrv_next_result,直到没有更多的结果。

为了成功地执行备份查询,您应该使用此片段。

代码语言:javascript
复制
$query="BACKUP DATABASE $db_name TO DISK='$file\\$filename.bak' WITH NOINIT;";

if ( ($stmt = sqlsrv_query($conn, $query)) )
{
    do 
    {
    } while ( sqlsrv_next_result($stmt) ) ;
    sqlsrv_free_stmt($stmt);
}else{
    die(print_r(sqlsrv_errors())); 
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41856954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档