使用输入和输出参数执行SQL存储过程

时间:2012-03-16 16:26:33

标签: php mysql sql stored-procedures pdo

我对存储过程和PDO库非常陌生,所以请放轻松。我正在尝试使用PDO函数执行存储过程,并检索记录集以及输出参数。我应该使用哪种功能以及需要哪些参数?

如果我想使用类似下面示例的函数执行基本语句,我应该使用什么PDO方法? e.g。

$mssql = new mssql;

$mssql->sql('stored_procedure()');
$mssql->sql('SELECT * FROM [test]');

我希望函数根据语句类型返回正确的结果。这是可能的吗?

更新

以防万一我没说清楚,'mssql'类使用PDO类来执行查询。目前我正在使用:

$PDO->prepare();
$PDO->exec();

1 个答案:

答案 0 :(得分:0)

在研究互联网之后,我发现使用PDO prepare,bindParam和执行方法实际上非常简单。

使用我的类的商店程序示例:

$mssql->bind_params = array(
    'BatchNum' => array(
        'value' => 'SS000008'
    ),
    'RecCount' => array(
        'value' => 0,
        'type' => PDO::PARAM_INT,
        'length' => 8
    )
);
$mssql->sql("{CALL sp_Batch_Sales(@paramOne=:paramOne,@paramTwo=:paramTwo)}");

这转换为:

$query = $PDO->prepare({CALL sp_Batch_Sales(@paramOne=:paramOne,@paramTwo=:paramTwo)});
$query->bindParam(':paramOne',$returned_parameters['paramOne']);
$query->bindParam(':paramTwo',$returned_parameters['paramTwo'],PDO::PARAM_INT,8);
$query->execute();

然后可以使用以下方法检索记录集:

do{
    // Get the results
    $results = $query->fetchAll(PDO::FETCH_ASSOC);

    // Only place the results into the array if they exist
    if(!empty($results)){
        $data[$i]['results'] = $results;
    }

    // Set the number of rows in the result array
    $data[$i]['rows'] = $query->rowCount();

    // Increment i
    $i++;
}while($query->nextRowset());

可以使用数组检索输入和输出参数:

$returned_parameters

我希望这会有所帮助