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

2 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);
}

2 Cevap

Sen PDOStatement :: closeCursor () yöntemini kullanarak bağlantınızı boşaltmanız gerekiyor

http://www.php.net/manual/en/pdostatement.closecursor.php

İnanıyorum

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

    $stmt->closeCursor()

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

sizin için bunu yapmak gerekir

Ben sadece bu sorunun içine kendimi koştu ve sorun yığılmış sorgularının kullanılması olduğu ortaya çıktı. Yukarıdaki çözüm sorunu çözmek değildi.

Biz şu hatayı tetikleyen bir önce çalışan bu sorgu vardı:

return $this->fquery('
  SELECT @follow_id:=COALESCE(MAX(follow_id) + 1, 0) FROM sync_delete_value; 
  INSERT INTO sync_delete_value (...)
  VALUES (%d, @follow_id, %d, "%s")',
  $val1, $val2, $val3
);

Ben içine bu değişti her şey her zamanki gibi devam:

$followId = $this->fquery('
  SELECT @follow_id:=COALESCE(MAX(follow_id) + 1, 0) FROM sync_delete_value'
);
return $this->fquery('
  INSERT INTO sync_delete_value (...)
  VALUES (%d, %d, %d, "%s")',
  $val1, $followId, $val2, $val3

);

Bu sorta pseudo-kod ama noktası olsun.