CakePHP с сохраненной процедурой

Я пытаюсь создать хранимую процедуру в Cakephp. Я создал процедуру в MYSQL и создал глобальную функцию в AppModel.php, чтобы выполнить процедуру. Функция в AppModel - это sProcedure. Теперь у меня есть два условия: у меня может быть переменная для возврата из процедуры или, возможно, прямой набор результатов, например. Я создал для Pagination. Хотя он снимает мою процедуру, но не возвращает никакого результата. Требуется ли моя функция?

    public function sProcedure($name = NULL, $inputParameter = array(), $outputParameter = array()) {
        $this->begin();
        $parameter = "";
        $outputParam = "";
        foreach ($inputParameter as $params) {
            $parameter .= $parameter == "" ? " '$params' " : ", '$params' ";
        }

        if (count($outputParameter) > 0) {
            foreach ($outputParameter as $prm) {
                $outputParam .= $outputParam == "" ? " @$prm " : ", @$prm ";
            }
        }
        $parameter = ($outputParam) ? $parameter . ", " . $outputParam : $parameter;
        $this->query("CALL `$name`($parameter);");
        $result = $this->query("SELECT $outputParam");
        $this->commit();
        return $result;
    }

    $sel_data = $this->ArticleNews->sProcedure("update_blank", $input_prameter, $output);
    debug($sel_data);

Ответы

Ответ 1

Нарушение фрагмента

$this->query("CALL `$name`($parameter);");

вызывает хранимую процедуру. Предположим, что тело процедуры является простым SELECT

SELECT table.* FROM table;

Эта процедура возвращает набор результатов. Кратко посмотрите код, который вы предоставили

 $this->query("CALL `$name`($parameter);");

Да, процедура вызывается, но результат /resource не присваивается переменной итерации.

$proc_result = $this->query("CALL `$name`($parameter);");

$proc_data = array();

if (false !== $proc_result)
{
    while ($proc_row = mysqli_fetch_array($proc_result))
    {
        $proc_data[] = $proc_row; 
    }
}

if (!empty($proc_data))
{
    //do whatever with procedure data
}

Связанная документация: connector-cpp-tutorials-stored-routines-statements

Ответ 2

Используйте следующий код для вызова хранимой процедуры cakephp 3

Его работа для меня.....

$this->connection = ConnectionManager::get('default');
$meritlists = $this->connection->execute("CALL generateMeritList()")->fetchAll('assoc');

Ответ 3

Ребята DONT bash ваши головы

проверьте эти пару строк:

$sql="CALL `delete_category`(".$id.");";
$db3= ConnectionManager::getDataSource('default');
$db3->query($sql);

гарантированно работает. getDatasource возвращает объект $mysqli, поэтому вы можете его использовать

проверить руководство PHP для sp Вызов хранимой процедуры в php