2011-05-18 152 views
0

我想在我的PHP代码中执行存储过程,此存储过程具有IN和OUT参数。存储过程是这样的:在PHP中使用IN和OUT参数执行存储过程

USE [phl_pmx] 

GO 

DECLARE @return_value int 

EXEC @return_value = [dbo].[PMX_SP_RecreateSynonymsOfSourceDb] 

        @sourceDb = phl 

SELECT 'Return Value' = @return_value 

GO 

而且我已经写了下面的代码,但它一直给他不能执行,或者他只是不会呈东西的错误。

<?php 
ini_set('display_errors',1); 
error_reporting(E_ALL); 
include_once 'DBC.php'; 
$link = mssql_connect('server', 'sa', 'password'); 

if (isset($_POST['StoredProcedure'])) 
{ 

mssql_select_db($id,$link); 


$a = new TableOutput(); 
$a->getTables ("PMX_SP_RecreateSynonymsOfSourceDb","phl"); 

mssql_close($link); 



} 
elseif (isset($_POST['Value'])) 
{ 
$query =mssql_query("UPDATE [phl].[dbo].[PMX_EXDB] set ExtraDb='phl_pmx'"); 
mssql_close($link); 
} 

?> 

这是它的功能。

<?php 
class TableOutput { 

function getTables($procname, $parameter) { 

    $stmt = null; 
    $data = null; 
    $vars = null; 
    $num = null; 
    $con = mssql_connect('server', 'sa', 'password'); 
if 
    (!$con) { 
     die('Could not connect: ' . mssql_error()); 
    } 

    mssql_select_db("phl",$con); 

    $this->setStmt(mssql_init($procname, $con)); 
    mssql_bind($this->getStmt(), '@sourceDb', $parameter, SQLINT2, false, false); 

    if ($rtn != 0) { 
     echo ("Errors happened when executing the stored procedure"); 
    } 
    $exec = mssql_execute($this->getStmt()); 
    $data = array(); 
    $i = 0; 
    while ($row = mssql_fetch_assoc($exec)) { 
     $data[++$i] = $row; 
    } 

    unset($con); 
    unset($stmt); 
    return $data; 
} 

function setStmt($a_stmt) { 
    $this->stmt = $a_stmt; 
} 

function getStmt() { 
    return $this->stmt; 
} 

} 
?>` 

有谁知道如何正确的代码,因为它使我展示以下错误:

Warning: mssql_execute(): stored procedure execution failed in /var/www/mssql/management/DBC.php on line 24 Warning: mssql_fetch_assoc() expects parameter 1 to be resource, boolean given in /var/www/mssql/management/DBC.php on line 27

回答

0

我不知道MSSQL的存储过程,所以我不能分析你存储过程。如果您proc已经返回多个结果,你需要使用mssql_next_result

do { 
    while ($row = mssql_fetch_row($exec)) { 
     $data[++$i] = $row; 
    } 
} while (mssql_next_result($exec)); 

也许这会有所帮助。

+0

感谢您的评论,但它仍然无法正常工作 – Maikel 2011-05-18 07:09:26

相关问题