IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

requête select refusée malgré closeCursor


Sujet :

PHP & Base de données

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 382
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut requête select refusée malgré closeCursor
    Bonjour,

    quand j'effectue un select, j'obtiens le message d'erreur suivant :
    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.
    Comme je sais qu'après avoir effectué un fetchAll, il convient de faire un closeCursor, voici le code de la méthode qui fait les select :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
      public function select($sql): array
        {
            try {          
     
                if ($this->isModeSQLDirect()) {
                    $this->stmt = self::pdo()->query($sql);                // pour info, je passe là
                } else {   
                    $this->prepareAndAttachValuesOrParams($sql);
                    $this->stmt->execute();
                }
                $ret=$this->stmt->fetchAll();  
                self::closeCursor(); //modif 23/10/20
                return $ret;
            } catch (Exception $e) {
                if ($this->debug) {
                    var_dump($sql);
                }
                error_log('PPP::select - '.$e->getMessage());
                throw $e;
            }
        }
     
    public static function pdo(): PDO
        {
            if (self::$pdo === null) {
                self::connect();
            }
            return self::$pdo;
        }
     
     protected static function connect(
            string $scheme = DB_SCHEME, string $host = DB_HOST, string $database = DB_NAME, string $user = DB_USER,
            string $pwd = DB_PWD, string $port = DB_PORT, string $timeout = DB_TIMEOUT, array $pdo_params = DB_PDO_PARAMS,
            array $dsn_params = DB_DSN_PARAMS
        ) {
            $dsn = "{$scheme}:host={$host};dbname={$database};";
     
            if ((int)($port)) {
                $dsn .= 'port='.(int)$port.';';
            }
     
            if ((int)$timeout) {
                $dsn .= 'connect_timeout='.(int)$timeout.';';
            }
     
            if ( ! empty($dsn_params)) {
                $dsn .= implode(';', $dsn_params).';';
            }
     
            $params = $pdo_params + [
                PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
                PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
                PDO::ATTR_EMULATE_PREPARES   => false,
                PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true
            ];
                try {
                self::$pdo = new PDO($dsn, $user, $pwd, $params);
            } catch (Exception $e) {
                throw $e;
            }
        }
     
     
    public function closeCursor()
        {
            if (isset($this->stmt)) {
                $this->stmt->closeCursor();
            }
        }

    Il y a plusieurs requêtes select qui sont exécutées sans problème, mais y en a une de plus qui bloque, et je ne sais pas pourquoi. Pouvez-vous m'aider ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  2. #2
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 382
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    C'est résolu. Trop compliqué à expliquer mais disons que ça venait de mes requêtes SQL.
    Rien à voir avec closeCursor, surtout que ce que je disais hier est faux...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Résultat commençant par un chiffre avec requête SELECT
    Par nicolas.pissard dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/04/2010, 13h31
  2. C'est possible dans une requête SELECT ?
    Par Kokito dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/04/2005, 16h59
  3. Insertion multiple à base de sous requête SELECT
    Par drinkmilk dans le forum Langage SQL
    Réponses: 8
    Dernier message: 14/04/2005, 16h34
  4. SQL Server 7.0 - Requête Select
    Par sangokus dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 23/03/2004, 10h32
  5. Optimisations mysql sur les requêtes SELECT: index
    Par leo'z dans le forum Débuter
    Réponses: 2
    Dernier message: 29/11/2003, 13h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo