【问题标题】:The second call stored procedures causes an error SQLSTATE[HY000]: General error: 2014 Cannot execute queries in zf2第二次调用存储过程报错 SQLSTATE[HY000]: General error: 2014 Cannot execute queries in zf2
【发布时间】:2014-03-27 12:05:28
【问题描述】:

这是我的控制器:

public function addAction()
{
    if($this->getAuthService()->hasIdentity())
    {
        $this->layout('layout/adminDashboardLayout');
        $request= $this->getRequest();
        if($request->isPost())
        {
            $rowmaterial= new RowmaterialModel();

            //Current User Id from Session
            $session = new Container('user'); 
            $userId = $session->offsetGet('userId');

            $rowmaterial->setCode($request->getPost('category_alias'));
            $rowmaterial->setCategory($request->getPost('category'));
            $rowmaterial->setCreatedOn(date('Y-m-d H:i:s'));
            $rowmaterial->setUpdatedOn(date('Y-m-d H:i:s'));
            $rowmaterial->setCreatedBy($userId);
            $this->getCategoryTable()->inserts($category);
        }
        $page = (int) $this->params()->fromRoute('page', 1);
        $iteratorAdapter = new \Zend\Paginator\Adapter\ArrayAdapter(iterator_to_array($this->getRowmaterialTable()->fetchAll()));
        $category = new \Zend\Paginator\Paginator($iteratorAdapter); 
        $viewModel= new ViewModel(array(
            'fetchAllDatas' => $category->setCurrentPageNumber($page)->setItemCountPerPage('8'),
            'categories' =>$this->getCategoryTable()->fetchAllCategoryStatusOn(),
            'uom' => $this->getUomTable()->fetchAllUomStatusOn(),
            'flashMessages' => $this->flashMessenger()->getMessages(),
        ));
        return $viewModel;



    }
    else
    {
        $this->flashMessenger()->addMessage("Please Login");
        return $this->redirect()->toRoute("admin");
    }

这是我的第一个模型文件函数:

public function fetchAllCategoryStatusOn()
{
    $statement= $this->adapter->query("call fetchAllCategoryStatusOn()");
    $result= $statement->execute();
    return $result;
}

这是我的第二个模型文件功能:

public function fetchAllUomStatusOn()
{
    $statement= $this->adapter->query("call fetchAllUomStatusOn()");
    $result= $statement->execute();
    return $result;
}

在调用这个fetchAllUomStatusOn()Storedprocedure 时会显示这个错误

SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries
 are active.  Consider using PDOStatement::fetchAll().  Alternatively, if your code is only
 ever going to run against mysql, you may enable query buffering by setting the 
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.

这是我的 global.php 文件:

return array(
    'db' => array(
        'driver'         => 'Pdo',
        'dsn'            => 'mysql:dbname=cp;host=localhost',
        'driver_options' => array(
            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
        ),
    ),
    'service_manager' => array(
        'factories' => array(
            'Zend\Db\Adapter\Adapter'
                => 'Zend\Db\Adapter\AdapterServiceFactory',
        ),
    ),
 );

我做了很多搜索我无法得到正确的答案,最后我得到了'closeCursor()'函数。我就是这样使用这个功能的,

 public function fetchAllUomStatusOn()
        {
            $statement= $this->adapter->query("call fetchAllUomStatusOn()");
            $statement->closeCursor();
            $result = $statement->execute();
            return $result;
        }

通过使用这个函数会得到这个错误。

   Fatal error: Call to undefined method Zend\Db\Adapter\Driver\Pdo\Statement::closeCursor() in /var/www/cp/module/Admin/src/Admin/Model/UomTable.php on line 100. 

我的 php 版本是 5.4。所以请帮助我......这是我第一次尝试使用 Stackoverflow。对不起我的英语不好。

【问题讨论】:

  • 您尝试在 zend pdo statement 上调用 closeCursor,而不是在 "real" pdo statement 上。遗憾的是,我不太了解 Zend,无法提供替代方案。
  • 感谢您对 Joachim Isaksson 的评论,但我怎样才能用这段代码实现 closeCursor...

标签: php mysql zend-framework stored-procedures zend-framework2


【解决方案1】:

我解决了这个错误。在控制器中使用iterator_to_array() 函数。

public function addAction()
{
   if($this->getAuthService()->hasIdentity())
   {
    $this->layout('layout/adminDashboardLayout');
    $request= $this->getRequest();
    if($request->isPost())
    {
        $rowmaterial= new RowmaterialModel();

        //Current User Id from Session
        $session = new Container('user'); 
        $userId = $session->offsetGet('userId');

        $rowmaterial->setCode($request->getPost('category_alias'));
        $rowmaterial->setCategory($request->getPost('category'));
        $rowmaterial->setCreatedOn(date('Y-m-d H:i:s'));
        $rowmaterial->setUpdatedOn(date('Y-m-d H:i:s'));
        $rowmaterial->setCreatedBy($userId);
        $this->getCategoryTable()->inserts($category);
    }
    $page = (int) $this->params()->fromRoute('page', 1);
    $iteratorAdapter = new \Zend\Paginator\Adapter\ArrayAdapter(iterator_to_array($this->getRowmaterialTable()->fetchAll()));
    $category = new \Zend\Paginator\Paginator($iteratorAdapter); 
    $viewModel= new ViewModel(array(
            'fetchAllDatas' => $category->setCurrentPageNumber($page)->setItemCountPerPage('8'),
            'categories' =>  iterator_to_array($this->getCategoryTable()->fetchAllCategoryStatusOn()),
            'uom' => iterator_to_array($this->getUomTable()->fetchAllUomStatusOn()),
            'flashMessages' => $this->flashMessenger()->getMessages(),
    ));
    return $viewModel;
}
else
{
    $this->flashMessenger()->addMessage("Please Login");
    return $this->redirect()->toRoute("admin");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-09
    • 2012-10-05
    • 2012-10-10
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    相关资源
    最近更新 更多