Symfony2 +存储过程|| 如何取得结果?

1倍

我目前正在努力从nativquerySymfony 2.4.3中获取结果为简单起见,我目前正在构建一个JobQueue / MsgQueue系统,它将仅在队列中添加/删除作业。该过程将获取第一个作业,将其设置为活动状态,并应返回整个结果。确实存在问题-我什么都拿不到。

我以以下示例为例:如何使用Doctrine2和MySQL执行存储过程

这是我在中使用的代码ConsoleCommand Class

protected function execute(InputInterface $input, OutputInterface $output)
{
    ## start
    $output->writeln('<comment>Starting JobQueue Ping process</comment>');

    // set doctrine
    $em = $this->getContainer()->get('doctrine')->getManager();

    $rsm = new ResultSetMapping;
    $result = $em->createNativeQuery(
        'CALL JobQueueGetJob (' .
        ':jobTypeCode' .
        ')', $rsm
    );

    $result->setParameters(array('jobTypeCode' => 1));
    $result->execute();
    $em->flush();

    if ($input->getOption('verbose')) {
        $output->writeln(var_dump($result->getResult()));
    }
}

在这里,您将获得过程代码和结果:
代码

PROCEDURE `JobQueueGetJob`(IN `jobType` TINYINT(2))
BEGIN
DECLARE jId int(11);
  SELECT `msgId` into jId FROM `jobqueue` WHERE `MsgTypeCode` = jobType AND `jState` = 'N' LIMIT 1;
  IF jId IS NOT NULL THEN
    UPDATE `jobqueue` SET `jState` = 'A' WHERE `msgId` = jId;
    SELECT * FROM `jobqueue` WHERE `msgId` = jId;
  END IF;
END

通过phpMyAdmin的结果

Your SQL query has been executed successfully
0 rows affected by the last statement inside the procedure
SET @p0 =  '1';

CALL `JobQueueGetJob` (
@p0
);

如文本所示,将不会返回任何结果,而是过程内的最后一条语句应该是查询本身。


解决方案(不是最好的)
命令:

// set doctrine
$em = $this->getContainer()->get('doctrine')->getManager()->getConnection();

// prepare statement
$sth = $em->prepare("CALL JobQueueGetJob(1)");

// execute and fetch
$sth->execute();
$result = $sth->fetch();

// DEBUG
if ($input->getOption('verbose')) {
    $output->writeln(var_dump($result));
}

输出:

array(5) {
  'msgId' =>
  string(3) "122"
  'msgTypeCode' =>
  string(1) "1"
  'jobCode' =>
  string(22) "http://mail.google.com"
  'jstate' =>
  string(1) "A"
  'created_at' =>
  string(19) "2014-02-01 03:58:42"
}
1倍

解决方案
以下是我终于找到的解决方案。它不是最好的,因为不再有Mapping了,但就我而言,这是没有必要的。
进一步:我需要更改为getConnection来获取PDO_MySQL并进一步更改为preparefetch()函数。现在,vardump节目是合适的结果。

// set doctrine
$em = $this->getContainer()->get('doctrine')->getManager()->getConnection();

// prepare statement
$sth = $em->prepare("CALL JobQueueGetJob(1)");

// execute and fetch
$sth->execute();
$result = $sth->fetch();

// DEBUG
if ($input->getOption('verbose')) {
    $output->writeln(var_dump($result));
}

输出:

array(5) {
  'msgId' =>
  string(3) "122"
  'msgTypeCode' =>
  string(1) "1"
  'jobCode' =>
  string(22) "http://mail.google.com"
  'jstate' =>
  string(1) "A"
  'created_at' =>
  string(19) "2014-02-01 03:58:42"
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Symfony2 +存储过程|| 如何取得结果?

来自分类Dev

如何从symfony2的存储库中查找记录

来自分类Dev

如何处理由DB2中的存储过程内部调用的存储过程返回的结果集

来自分类Dev

检索存储过程结果

来自分类Dev

DB2存储过程未返回结果集

来自分类Dev

DB2 - 多结果集存储过程

来自分类Dev

如何使用准则2在Symfony 2中调用带有输出参数的mysql存储过程?

来自分类Dev

如何在symfony2中访问实体的存储库方法?

来自分类Dev

如何在Symfony2上以Json的身份返回存储库对象

来自分类Dev

如何配置Monolog以使用Symfony2和Doctrine将日志存储到MongoDB中

来自分类Dev

如何在Symfony2上以Json的身份返回存储库对象

来自分类Dev

如何使用 symfony2 将日志消息存储到特定的日志文件

来自分类Dev

如何调试存储过程?

来自分类Dev

如何创建存储过程

来自分类Dev

如何创建存储过程?

来自分类Dev

LinqToSql如何生成存储过程的输出结果

来自分类Dev

如何从PostgreSQL存储过程获取结果集?

来自分类Dev

如何从CLR存储过程获取结果

来自分类Dev

如何从Oracle中的Java调用2个不同的存储过程?

来自分类Dev

如何使用Visual Basic调用DB2存储过程?

来自分类Dev

如何删除 DB2 Java 存储过程?

来自分类Dev

存储过程返回空结果

来自分类Dev

存储过程返回零结果

来自分类Dev

(MySQL)存储过程-遍历结果

来自分类Dev

EF存储过程结果的枚举

来自分类Dev

从存储过程返回错误结果?

来自分类Dev

缓存从存储过程返回的结果

来自分类Dev

Oracle 存储过程合并结果

来自分类Dev

Symfony2学说关联结果