Использование хранимых процедур с cakephp 3.x - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь использовать хранимую процедуру SQL Server с cakephp 3.x, но получаю ошибку базы данных.

Это мой контроллер:

use Cake\Datasource\ConnectionManager;

if($this->request->is('post')){
    $data = $this->request->getData();
    $param1 = $data['playId'];
    $param2 = $data['cardboard'];

    if(is_numeric($param1) && is_numeric($param2)){        
        $param1 = $data['playId'];
        $param2 = $data['cardboard'];

        $conn = ConnectionManager::get('ssql');

        $requested = $conn->query(
            'call searchPrem(?, ?)', 
            [$param1, $param2]
        )->fetchAll('assoc');


        //$exec = debug($requested);
    }
       echo json_encode( $requested );
}

Я получаю эту ошибку SQL:

Ошибка: SQLSTATE [42000]: [Microsoft] [Драйвер ODBC 13 для SQL Server] [SQL Server] Неверный синтаксис рядом с'@P1'.

Как выполнить хранимую процедуру и получить данные результата?

Ответы [ 2 ]

0 голосов
/ 03 июня 2019

Я нашел решение:

$conn = ConnectionManager::get('ssql');
$sql = $conn->execute("yourfunction @id = $playId, @type = $type")->fetchAll('assoc'); 
0 голосов
/ 24 мая 2019

В Cake 2.x я использовал решение, как показано ниже:

if ($connection = $this->getDataSource()->connection) {
        $statement = oci_parse($connection, "DECLARE x number; BEGIN :x := searchPrem(" . $var1 . ", " . $var2 . "); END;");

        oci_bind_by_name($statement, ':x', $result, 10);

        if (oci_execute($statement)) {
            // Success
        }
}

Этот пример работает с диалектом Oracle.Вам следует перейти на Cake 3.x и диалект вашей базы данных.

...