【问题标题】:Returning a select statment from a mssql stored proc using PHP (bool(false))使用 PHP (bool(false)) 从 mysql 存储过程中返回 select 语句
【发布时间】:2012-10-01 16:02:51
【问题描述】:

我正在使用 php 来使用 mssql 存储过程,我的代码可以与其他存储过程一起使用,但是当我尝试从这个存储过程返回某些内容时,它只返回 bool(false) 而不是所选值。

    $para = array(array($this->Forename), array($this->Surname), );  
    $result = mssqldb::query("{call usp_NewCustToOrderRemote(?,?)}", $para);  
    $userid = sqlsrv_fetch_array($result);  var_dump($userid);

存储过程基本上只是插入参数然后选择新的行id

    set     @newID = @@IDENTITY
    select @newID

我无法控制存储过程,因此无法添加返回值。 当我在管理工具中运行存储过程时,它运行良好,当我在 php 中运行时,会创建行。 哦,我的 db 连接器类没有使用 mssql 但 sqlsrv 它只是命名不正确。 我错过了一些非常明显的东西吗?

【问题讨论】:

  • 我依赖于我的班级来捕获错误,我得到的错误是“查询的活动结果不包含任何字段。”所以我更进一步!
  • 所以我需要做的就是使用 sqlsrv_next_result($result); 移动到下一个结果。然后 sqlsrv_fetch_array($result);再次简单!

标签: php sql-server stored-procedures


【解决方案1】:

由于我的存储过程更新了一行,然后返回了“选择”,我不得不使用转到下一个结果,因为第一个结果是更新的行。

    sqlsrv_next_result($result);
    $id = sqlsrv_fetch_array($result)[0];

我也添加了验证 :)

【讨论】:

  • 您应该接受这个答案,方法是点击问题分数下方的大勾号 (✔)。
  • 感谢@Madara Uchiha,我不得不等待 2 天才能做到这一点。
  • 我也处于类似情况,但有点不同的是我的存储过程上有 PRINT() 语句。出于调试目的保留 PRINT() 是必要的。我之前使用 mssql_connect 时并没有感到困扰。但是现在在转移到 SQLSRV 之后,使用这些 PRINT(),sqlsrv_fetch_array() 或 sqlsrv_fetch() 返回 FALSE。 sqlsrv_next_result($result);在这种情况下不会帮助我,我不想删除 PRINT()。你知道允许 PRINT() 的方法吗?
猜你喜欢
  • 2019-01-25
  • 1970-01-01
  • 2014-01-01
  • 1970-01-01
  • 2013-02-02
  • 2017-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多