Zgodnie z pomocą na forum tym i innym, rozwiązanie jest proste:
$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
Jednakże mimo to wciąż mam błąd:
Kod
Fatal error: Uncaught exception 'PDOException' with message '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.
Błąd pojawia się w tej klasie: https://github.com/PHPAuth/PHPAuth
public function getSessionUID($hash) { $query = $this->dbh->prepare("SELECT uid FROM {$this->config->table_sessions} WHERE hash = ?"); if ($query->rowCount() == 0) { return false; } return $query->fetch(\PDO::FETCH_ASSOC)['uid']; }
oraz w metodzie checkSession($hash);
$query = $this->dbh->prepare("SELECT id, uid, expiredate, ip, agent, cookie_crc FROM {$this->config->table_sessions} WHERE hash = ?"); if ($query->rowCount() == 0) { return false; }
Zależnie od podstrony to jest w tutaj lub tutaj błąd.
Pojawia się tylko wtedy gdy wykorzystuję metody publiczne PHP Auth w innych klasach.
Ścieżka do błędu to:
Kod
Stack trace:
#0 /home/(...)/class/PHPAuth/Auth.php(1420): PDOStatement->execute(Array)
#1 /home/(...)/class/obslugaKoszyka.php(71): PHPAuth\Auth->createSession()
#2 /home/(...)/class/obslugaKoszyka.php(42): obslugaKoszyka->sessionId()
#3 /home/(...)/class/obslugaKoszyka.php(38): obslugaKoszyka->getIdKoszyk()
#4 /home/(...)/class/obslugaKoszyka.php(9): obslugaKoszyka->sprawdzZawartoscKoszyka(6168)
#5 /home/(...)/produkt.php in /home/(...)/class/PHPAuth/Auth.php on line 480
#0 /home/(...)/class/PHPAuth/Auth.php(1420): PDOStatement->execute(Array)
#1 /home/(...)/class/obslugaKoszyka.php(71): PHPAuth\Auth->createSession()
#2 /home/(...)/class/obslugaKoszyka.php(42): obslugaKoszyka->sessionId()
#3 /home/(...)/class/obslugaKoszyka.php(38): obslugaKoszyka->getIdKoszyk()
#4 /home/(...)/class/obslugaKoszyka.php(9): obslugaKoszyka->sprawdzZawartoscKoszyka(6168)
#5 /home/(...)/produkt.php in /home/(...)/class/PHPAuth/Auth.php on line 480
W pliku produkt.php jest odwołanie do koszyka:
$PDO = new \PDO; $Auth = new \PHPAuth\Auth($PDO); $obslugaKoszyka = new obslugaKoszyka($PDO, $Auth); $obslugaKoszyka -> dodajElement($idProduktu, $ileElementow);
Próbowałem także ten błąd zrobić w osobnym pliku, z pominięciem moich klas i skryptów.
Skorzystałem m.in. z tego forum i użyłem kodu, który powodował taki błąd:
oraz
for($i=0;$i<10;$i++) { $query = ' SELECT * FROM sessions'; $rWynik = $pdo -> query( $query ); while($a1 = $rWynik->fetch()) $query = ' SELECT 1 '; $rWynik2 = $pdo -> query( $query ); $a2 = $rWynik2->fetch(); }
$stmt = $pdo->prepare('SELECT CURDATE()'); $stmt->execute(); $row = $stmt->fetch(); $stmt = $pdo->prepare('SELECT CURDATE()');
Ale wykonują się bez problemu BEZ MYSQL_ATTR_USE_BUFFERED_QUERY
Proszę o pomoc, bo może jeszcze czegoś nie robię? Albo mam jakiś błąd.