栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

php PDO :: FETCH_ASSOC在存储过程中备份后未检测到选择

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

php PDO :: FETCH_ASSOC在存储过程中备份后未检测到选择

说明:

错误的原因是

BACKUPDATAbase
返回参考消息,并且您的存储过程具有多个结果集。我用测试脚本重现了您的错误(尽管在您的问题中我看不到您如何准备存储过程)。您可以尝试以下解决方案之一(我编写了简单的脚本,可以轻松地在函数中实现这些脚本)。

  • 调用PDOStatement :: nextRowset来获取每个结果集(在这种情况下,需要再进行两次调用)

  • OUTPUT
    在您的存储过程中使用参数。在这种情况下,您需要获取所有结果集,然后再获取输出参数的值。

解决方案1:

存储过程:

create procedure [dbo].[sp_IWBackup]asbegin    declare        @route varchar(500),         @answer int = 0    set nocount on    set @route = 'I:route'+(replace((replace(convert(varchar, getdate(), 21),':',';')),'.',';'))+'Full.bak'    set @answer = 1    begin try        backup database databasename to disk = @route    end try    begin catch        set @answer = 0    end catch    select @answer as answerend

PHP:

<?php$server   = 'serverinstance,port';$database = 'database';$uid      = 'uid';$pwd      = 'pww';try {    $dbh = new PDO("sqlsrv:server=$server;Database=$database", $uid, $pwd);    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);} catch( PDOException $e ) {    die("Error connecting to SQL Server. ".$e->getMessage());}try {    $sql = "{CALL sp_IWBackup}";    $stmt = $dbh->prepare($sql);    $stmt->execute();    $stmt->nextRowset();    $stmt->nextRowset();    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {        foreach ($row as $key => $value) { echo $key.": ".$value."<br>";        };    }} catch( PDOException $e ) {    die( "Error executing stored procedure: ".$e->getMessage());}$stmt = null;$dbh = null;?>

解决方案2:

存储过程:

create procedure [dbo].[sp_IWBackupOut]    @answer int OUTPUTasbegin    declare         @route varchar(500)    set nocount on    set @route = 'I:route'+(replace((replace(convert(varchar, getdate(), 21),':',';')),'.',';'))+'Full.bak'    set @answer = 1    begin try        backup database databasename to disk = @route    end try    begin catch        set @answer = 0    end catchend

PHP:

<?php$server   = 'serverinstance,port';$database = 'database';$uid      = 'uid';$pwd      = 'pww';try {    $dbh = new PDO("sqlsrv:server=$server;Database=$database", $uid, $pwd);    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);} catch( PDOException $e ) {    die("Error connecting to SQL Server. ".$e->getMessage());}try {    $sql = "{CALL sp_IWBackupOut (?)}";    $stmt = $dbh->prepare($sql);    $answer = -1;    $stmt->bindParam(1, $answer, PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT, PDO::SQLSRV_PARAM_OUT_DEFAULT_SIZE);    $stmt->execute();    do {    } while ($stmt->nextRowset());    echo "answer: ".$answer;} catch( PDOException $e ) {    die( "Error executing stored procedure: ".$e->getMessage());}$stmt = null;$dbh = null;?>


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/614466.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号