2013-11-28 58 views
0

我有一个安装方法为我的cms女巫读取sql文件并执行它们。到目前为止好.. 但我也需要做一些初始化的DB(插入一些动态值)ZF2 PDO无缓冲查询

$q = "INSERT INTO `tbl_users_roles` (`userId`, `roleId`) VALUES 
      (1,3), 
      (2,4);"; 
    $db->query($q, Adapter::QUERY_MODE_EXECUTE); 

    $q = "INSERT INTO `tbl_users` (`username`, `password`, `accountStatus`) VALUES 
      ('serverAdmin',?,1), 
      ('admin',?,1);"; 
    $db->query($q, array($passAdmin, $passUser)); 

这些刀片被执行,但下一个SQL文件抛出一个异常:

PDOException: 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. 

ZF2 PDO语句不具有fetchAll或closeCursor。 那么如何解决这个问题?

回答

4

确定我改变了最后的查询:

$st = $db->query($q); 
    $st->execute(array(serialize($perm)))->getResource()->closeCursor(); 

这个工作,但剂量其他数据库驱动程序都有closeCursor吗? 应该做到这一点:(

0

我已经以这种方式解决了一个通用的方法:

$sql = " 
    SET FOREIGN_KEY_CHECKS = 0; 
    TRUNCATE TABLE `customer`; 
    TRUNCATE TABLE `customer_address`; 
    TRUNCATE TABLE `customer_contact`; 
    SET FOREIGN_KEY_CHECKS = 1; 
    "; 

$result = $this->adapter->query($sql)->execute(); 
$result->getResource()->closeCursor();