Выполнение хранимых процедур SQL с параметрами ввода и вывода - PullRequest
0 голосов
/ 16 марта 2012

Я очень плохо знаком с хранимыми процедурами и библиотекой PDO, поэтому, пожалуйста, будьте осторожны со мной.Я пытаюсь выполнить хранимую процедуру с помощью функции PDO и получить наборы записей вместе с выходными параметрами.Какую функцию я должен использовать и какие параметры необходимы?

Если я хочу выполнить базовые операторы, используя функцию, подобную следующему примеру, какой метод PDO мне следует использовать?например,

$mssql = new mssql;

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

Я хочу, чтобы функция возвращала правильные результаты в зависимости от типа оператора.Это будет возможно?

ОБНОВЛЕНИЕ

На всякий случай, если я не очень ясно дал понять, класс 'mssql' использует класс PDO для выполнениязапросы.На данный момент я использую:

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

1 Ответ

0 голосов
/ 20 марта 2012

Проведя исследования в Интернете, я обнаружил, что с помощью методов подготовки PDO, 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

Надеюсь, это поможет

...