【发布时间】: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