Diğer tamponsuz sorguları aktif iken PDO sorguları yürütmek olamaz

1 Cevap php

Ben bu basit bir düzeltme olmalı biliyorum ve ben bu hatayı alıyorum ben neden kısmen anlıyorum ama bunu nasıl düzeltebilirim bilmiyorum. Ben dokümanlar üzerinde baktım ama tamponlu sorgular seçeneğini kullanarak başka bir çözüm bulamıyor. Ben de bu denedim ama çalışmıyor.

Hata: diğer tamponsuz sorgular aktif iken PDO sorguları yürütmek olamaz

Hata Ben $ sonuç dizi inşa ediyorum hattından geliyor.

foreach($phones as $phone)
{
    $stmt = db::getInstance()->prepare("CALL phones(:phone)");
    $stmt->bindParam(':phone', $phone, PDO::PARAM_INT, 10);
    $stmt->execute();

    $result[] = db::getInstance()->query("SELECT @phone;")->fetchAll(PDO::FETCH_ASSOC);
}

1 Cevap

Adlı bir örnek masa atalım

CREATE TABLE foo (
  id int auto_increment,  
  phone int,  
  primary key(id),  
  unique key(phone)  
)

bir örnek prosedür

delimiter //
CREATE PROCEDURE phones(in p INT)
BEGIN
  SELECT phone FROM foo WHERE phone > p;
END//
delimiter ;

ve bazı örnek veriler

INSERT INTO foo (phone) VALUES (1),(2),(3),(4),(5)

PDOStatement kullanarak bu saklı yordam set sonuç almak mümkündür.

$pdo = new PDO('mysql:host=localhost;dbname=test', 'localonly', 'localonly');
$pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$stmt = $pdo->prepare("CALL phones(:phone)");
$stmt->bindParam(':phone', $phone);
$phone = 1;
$stmt->execute();
do {
  echo "\nresult set: ";
  while($row=$stmt->fetch()) {
    echo $row['phone'], " | ";
  }
} while($stmt->nextRowset());

baskılar result set: 2 | 3 | 4 | 5 |

(Test ortamı: php 5.3.1/winxp, mysql 5.1.37)

do { } while($stmt->nextRowset()); döngü belki de sizin "orijinal" sorunu çözer.