General error: 2014 Cannot execute queries while other unbuffered queries are active
Bonjour,
J'utilise PHP 5.2.5
Et mysql : 5.0.45
Une classe sert à se connecter sur ma table gérant les session.
Aujourd'hui elle utilise Query et exec. Hier elle utilisait prepare et execute avec le même "résultat" l'erreur
Citation:
Warning: PDO::exec() [function.PDO-exec]: 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. in E:\ZMWS\_web.zmwsc\sacAdos\classes\modele\modSessions.php on line 40
:aie:
Voici ladite classe :
Code:
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
| <?php
/*16/01/2014 controleur dédié à la gestion des sessions*/
require_once __SAC.'/classes/utilitaires/singleton.class.php';
require_once __SAC.'/classes/modele/4D.php';
class ses extends aBsSoLitaire {
private $x;
private $cx;
private $sth = null;
private $my;
private $ct;
public $r=array();
protected function __construct() {
parent::__construct ();
$this->ct = (int) 0;
$this->iniBase();
}
private function iniBase(){
$this->x = laBas::donneLinstant();
$this->cx = $this->x->bx_icise();
}
private function S_lasession($p){
$this->my = (string) "CALL S_lasession";
$this->my .= '('.$p->quoi.','.$this->cx->quote($p->id).','.$this->cx->quote($p->utid).','.$this->cx->quote($p->emp);
$this->my .= ','.$this->cx->quote($p->data).','.$this->cx->quote($p->neo).')';
if($p->quoi == 1){//le seul select
$this->sth = $this->cx->query($this->my);
$this->r = $this->sth->fetchAll(PDO::FETCH_ASSOC);
$this->sth->closeCursor();
$this->sth = null;
return $this->r;
}else{//insert ou update ou delete
try{
$this->r = $this->cx->exec($this->my);
}catch(PDOException $e){
echo(sql_error($e));
}
return $this->r;
}
}
//Méthodes publiques dont la première d'un singleton
public static final function donneLinstant(){
$bob = parent::donneLinstance(__CLASS__);
if($bob === FALSE){
throw new Exception('ERREUR : principe de départ non respecté');
}else{
return $bob;
}
}
final public function appel($a,$r){
return $this->$a($r);
}
}
?> |
Voici la procédure stockée correspondante :
Code:
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
| CREATE PROCEDURE `S_lasession`(
IN `p_quoi` TINYINT,
IN `p_id` VARCHAR(255),
IN `p_utid` MEDIUMINT(8),
IN `p_emp` VARCHAR(40),
IN `p_data` TEXT ,
IN `p_neID` VARCHAR(255))
BEGIN
DECLARE v_count TINYINT DEFAULT 0;
CASE p_quoi
WHEN 1 THEN
SELECT `s_lessessions`.`sdata` AS 'D', `s_lessessions`.`sempreinte` AS 'Semp'
FROM `icise`.`s_lessessions`
WHERE sid = p_id ORDER BY sstamp DESC LIMIT 0 , 1;
WHEN 2 THEN
DELETE FROM `icise`.`s_lessessions`
WHERE `sstamp` < SUBTIME(now(),'0 0:2:0.001');
SELECT COUNT(`sid`) INTO v_count FROM `icise`.`s_lessessions` WHERE `sid`=p_id;
IF (v_count > 0) THEN
UPDATE `icise`.`s_lessessions` SET `sdata`=p_data,`sempreinte`=p_emp WHERE `sid`=p_id;
ELSE
INSERT INTO `icise`.`s_lessessions` (`sid`,`sdata`,`sempreinte`,`sutid`)
VALUES(p_id,p_data,p_emp,p_utid);
END IF;
WHEN 3 THEN
DELETE FROM `icise`.`s_lessessions` WHERE `sid`=p_id;
WHEN 4 THEN
DELETE FROM `icise`.`s_lessessions`
WHERE (`sutid`=p_utid) OR(`sstamp` < SUBTIME(now(),'0 0:2:0.001'));
WHEN 5 THEN
UPDATE `icise`.`s_lessessions` SET `s_lessessions`.`sid`=p_neID;
END CASE;
END$$ |
Bien évidemment la connexion PDO utilise :
Code:
$this->bx[$i] = new PDO($this->dsn[$i], $this->lUt, $this->passe, array(PDO::ATTR_PERSISTENT=>true,PDO::MYSQL_ATTR_USE_BUFFERED_QUERY=>true));
Nous nous abstiendrons de commenter l'efficacité de
Code:
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY=>true
:cry:
Si vous pouviez aider...
Merci d'avance !