[英]Backup and restore SQL server database using php
我想做一个简单的网站,可以打开、显示和运行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!";
}
}
这里似乎有一个解决方案。 您的问题也发生在我身上,但在我的情况下,有时会创建备份,有时不会,我猜当 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()));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.