Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Błąd PDO - General error: 2014, Wymuszenie i naprawa błędu
Tomplus
post 20.07.2016, 14:13:45
Post #1





Grupa: Zarejestrowani
Postów: 1 875
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Witam,

Zgodnie z pomocą na forum tym i innym, rozwiązanie jest proste:
  1. $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

  1. public function getSessionUID($hash)
  2. {
  3.  
  4. $query = $this->dbh->prepare("SELECT uid FROM {$this->config->table_sessions} WHERE hash = ?");
  5. $query->execute(array($hash)); //w tej linii
  6.  
  7. if ($query->rowCount() == 0) {
  8. return false;
  9. }
  10.  
  11. return $query->fetch(\PDO::FETCH_ASSOC)['uid'];
  12. }


oraz w metodzie checkSession($hash);
  1. $query = $this->dbh->prepare("SELECT id, uid, expiredate, ip, agent, cookie_crc FROM {$this->config->table_sessions} WHERE hash = ?");
  2. $query->execute(array($hash));
  3.  
  4. if ($query->rowCount() == 0) {
  5. return false;
  6. }


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


W pliku produkt.php jest odwołanie do koszyka:
  1. $PDO = new \PDO;
  2. $Auth = new \PHPAuth\Auth($PDO);
  3. $obslugaKoszyka = new obslugaKoszyka($PDO, $Auth);
  4. $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:

  1. for($i=0;$i<10;$i++) {
  2. $query = ' SELECT * FROM sessions';
  3. $rWynik = $pdo -> query( $query );
  4.  
  5.  
  6. while($a1 = $rWynik->fetch())
  7. print_r($a1);
  8.  
  9. $query = ' SELECT 1 ';
  10. $rWynik2 = $pdo -> query( $query );
  11. $a2 = $rWynik2->fetch();
  12.  
  13. var_dump( $a2 );
  14. }
oraz
  1. $stmt = $pdo->prepare('SELECT CURDATE()');
  2. $stmt->execute();
  3. $row = $stmt->fetch();
  4.  
  5. print_r($row);
  6.  
  7. $stmt = $pdo->prepare('SELECT CURDATE()');
  8.  
  9. print_r($pdo->errorInfo());


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.

Ten post edytował Tomplus 20.07.2016, 14:14:43
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 10:27