php - 使用php备份和恢复SQL Server数据库

标签 php sql-server database

我想制作一个简单的网站,它可以打开、显示和运行sql server查询,就像从sql server management studio执行查询一样。它已经可以执行一些查询,例如选择(然后将其显示为表格)、插入、更新、删除,包括当我使用 where/group/order 语句时。 但是,当我使用查询对数据库进行备份时:

BACKUP DATABASE 'mydb' TO DISK='pathname\filename.bak' WITH INIT/NOINIT

它只能备份数据库一次,然后当我使用相同的输入执行查询时,它没有错误,但也没有从执行中生成文件备份。我不知道为什么,但是当我从 sql server management studio 执行相同的查询(使用不同的文件名,以便以前的文件不会被覆盖)时,它执行时没有错误并创建另一个文件备份。

代码: php

$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. 当我重新启动电脑时,一切恢复正常(再次创建另一个 .bak)

最佳答案

看来有一个解决办法here 。你的问题也发生在我身上,但在我的情况下,有时创建了备份,有时没有,我猜当 php 执行时备份过程会失败,并且它在结束备份过程之前退出,因此,它会在备份过程中终止连接过程。我意识到要执行无查询类型的sql序列,必须使用指令sqlsrv_next_result来使用它,直到没有更多结果为止。

您应该使用此代码片段才能成功执行备份查询。

$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())); 
}

关于php - 使用php备份和恢复SQL Server数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41856954/

相关文章:

PHP搜索mysql表找到 HitTest 门的字段

java servlet : duplicate key row in object with unique index 'XAK1timItem'

c# - IDbConnection Open 挂起 C#

sql-server - 数百个数据库 SQL Server 日志传送

database - 与数据库和消息队列记录的最终一致性

php - 将数据库的每一行值与我自己的值进行比较

javascript - 如何使整个 <div> 可选择?

javascript - 从数据库获取数据并显示在另一个页面上

php - 优化大型且逐渐增加的数据库

mysql - 如何在in子句-mysql中使用数字列表