我试图在游标迭代中获取一些结果,所以我得到了相关的元素和东西。但是当在迭代内部执行此查询时,即使还有更多数据需要,迭代游标也会终止并且迭代将结束。
一个例子
protected $em;
public function __construct() {
$this->em = $this->get('doctrine')->getManager('default');
}
public function getProducts() {
$query = "SELECT * FROM products"; // 100 Products
$stmt = $this->select($query);
while($result = $stmt->fetch()) {
// This breaks the cursor so only 1 product is parsed.
// If I remove this line, iteration ends perfectly (100 products)
$pictures = $this->getPictures($result['id']);
}
}
public function getPictures($product) {
$query = "SELECT * FROM pictures WHERE product_id = :product_id";
$stmt = $this->select($query, array('product_id' => $product));
return $stmt->fetchAll();
}
public function select($query, array $params = array()) {
$conn = $this->em->getConnection();
$stmt = $conn->prepare($query);
foreach($params as $key => $value) {
$stmt->bindValue($key, $value);
}
$stmt->execute();
return $stmt;
}
答案 0 :(得分:0)
我认为你不能在不关闭前一个游标的情况下使用另一个游标。 如果您查看ResullStatement接口:
/**
* Closes the cursor, enabling the statement to be executed again.
*
* @return boolean TRUE on success or FALSE on failure.
*/
public function closeCursor();
当游标关闭时,通常会释放stmt内存。 那么,为什么不为此只写一个查询呢?您可以使用子查询来提取所有产品ID。 类似的东西:
从图片p中选择*,其中p.id IN(从产品pr中选择pr.id)`