我正在努力使其正常工作。
我们有一个基于Codeigniter的站点,该站点即将移至新服务器。我被要求删除此代码中的几个直接mssql_ *调用。一般来说,这很容易。
但是,在某些地方系统使用输出参数,但我无法获得这些参数以返回任何内容。重复的网络搜索未产生任何效果。
简化到一个测试存储过程的基础:-
CREATE PROCEDURE [dbo].[output_test](
@p_status CHAR(1) OUTPUT
) AS
BEGIN
SET @p_status = '2'
END
尝试在事务中使用Codeigniter例程:-
$p_status = 0;
$query = 'EXEC dbo.output_test ?';
$this->db->trans_start();
$q = $this->db->query($query, array(&$p_status));
echo "*****".$p_status."*****";
$query = $this->db->query('SELECT @p_status AS p_status');
$this->db->trans_complete();
echo "*****".$p_status."*****";
if(isset($query->num_rows) && $query->num_rows > 0)
{
foreach($query->result() as $arr)
{
$return['status'] = $arr->p_status;
}
}
这只是给我 必须声明标量变量“ @p_status” 。
在相当有限的Codeignitor驱动程序中,我几乎尝试了所有替代方法,而没有任何改进。输出参数是否通过引用或值传递都没有关系。
有什么建议吗?
我意识到我可以在这个演示案例中选择var,但是在整个问题中是不可能的,因为我正试图从某些过程中返回结果集,并避免返回多个结果集,我想修改它们以将状态返回为输出var而不是第二个结果集。