Intereting Posts
Корзина WooCommerce – проверка категорий условных элементов Преобразование формата JSON в CSV с использованием PHP Расширьте класс исключений Codeigniter для добавления настраиваемого метода Может ли AWS SDK для PHP работать без отключения проверки SSL на osx? Www и не www сайты PHP Echo Timezone на основе смещения GMT Эффективный способ расчета количества внешних ключей во второй таблице и отображения его с помощью строк из первой таблицы – PHP – MySQL Цитирование через базу данных mysql Как продлить класс Аура-гвардии Ларавеля? Laravel: Как удалить строки из нескольких таблиц с одинаковым идентификатором только с одним запросом? как присоединиться к двум многомерным массивам в php Случайное проигрывание переменных сеанса только в Google Chrome & URL Rewriting Лучший способ загрузить файл в PHP Некоторые символы, закодированные во время POST, в то время как другие utf-8 bom и заголовки в php

Доступ к выходу хранимой процедуры MySQL в Zend Framework 2

У меня есть простая MySQL-хранимая процедура, которая принимает два параметра и вставляет строку в таблицу. Я могу выполнить его как можно лучше из Zend Framework 2 следующим образом:

$result = $this->dbAdapter->query('CALL sp_register_user(?, ?)', array('username', 'password')); 

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

Теперь я хочу иметь выходное значение из моей хранимой процедуры в качестве третьего параметра, так что примерно так:

 DELIMITER // CREATE PROCEDURE sp_register_user(IN username VARCHAR(50), IN password VARCHAR(128), OUT code INTEGER) NOT DETERMINISTIC COMMENT 'Registers a user' BEGIN INSERT INTO user VALUES (username, password); SET code = 123; END // 

Вопрос в том, как я могу получить доступ к этой выходной переменной из PHP (ZF2). Я только смог найти примеры того, как это сделать непосредственно через PDO, который я использую. Пример 4 на этой странице показывает, как это сделать через PDO напрямую. Меня беспокоит, что если я напрямую использую объект PDO, я теряю некоторые абстракции, и поэтому я предполагаю, что всегда буду использовать PDO.

Тем не менее, я попытался заставить его работать с PDO напрямую, например:

 $username = 'my_username'; $password = 'my_password'; $code = 0; $stmt = $this->dbAdapter->createStatement(); $stmt->prepare('CALL sp_register_user(?, ?, ?)'); $stmt->getResource()->bindParam(1, $username); $stmt->getResource()->bindParam(2, $password); $stmt->getResource()->bindParam(3, $code, \PDO::PARAM_INT, 3); $stmt->execute(); 

Однако я получаю сообщение об ошибке, что оператор не может быть выполнен.

Идеальное решение было бы тем, где я мог бы использовать слой абстракции ZF2, но любые идеи о том, как получить доступ к выходному параметру, приветствуются и оцениваются.

это должно работать, потому что я использую его :

  $str = "DECLARE @Msgvar varchar(100);DECLARE @last_id int; exec CallEntry_Ins $CallLoginId,".$this->usrId .",@Msg = @Msgvar OUTPUT,@LAST_ID = @last_id OUTPUT; SELECT @Msgvar AS N'@Msg',@last_id AS '@LAST_ID'; "; $stmt = $db->prepare($str); $stmt->execute(); $rtStatus = $stmt->fetchAll(); $rtStatus[0]["@LAST_ID"] //accessing Op para