2012-08-01 3 views
0

Comment puis-je activer cette fonction? La dernière requête n'est pas exécutée .. J'ai beaucoup cherché des requêtes dans une boucle (foreach, for, while) mais rien .. J'essaie de stocker des sessions.requête multiple + requête unique

private function gc($expire) 
{ 
    $gcq = "SELECT `path`, `last`, LENGTH(`path`) FROM `sessions` WHERE LENGTH(`path`) > 0 AND DATE_ADD(`last`, INTERVAL ".(int) $expire." SECOND) < NOW();"; 
    $gcq .= "DELETE FROM `sessions` WHERE DATE_ADD(`last`, INTERVAL ".(int) $expire." SECOND) < NOW()"; 
      if($this->dbh->multi_query($gcq)) 
       { 
       $arr_gc = null; 
       $count = 0; 
       do { 
         if($result = $this->dbh->store_result()) 
         { 
         while($row = $result->fetch_assoc()) 
         { 
         $arr_gc[$count] = array($row['path'], $row['last']); 
         $count++; 
         } 
         $result->free(); 
         } 
         if($this->dbh->more_results()) 
         { 
         $garbage = null; 
         } 
        } 
        while($this->dbh->next_result()); 
        } 
        // no problems up here.. 
        // problems from here to end....   

        $alfa = count($arr_gc); 

        if($alfa > 0) 
        { 
         $count = 0; 

         while($count < $alfa) 
         { 
         $this->dbh->query("INSERT INTO `store_sess` SET `xpath` = '".$this->dbh->real_escape_string($arr_gc[$count][0])."', in = '".$this->dbh->real_escape_string($arr_gc[$count][1])."', out = '0000-00-00 00:00:00'"); 
         $count++; 
         }       
        } 
    return $this->dbh->affected_rows; 
} 

EDIT: structure de table store_sess:

id int (autoincrement) 
xpath longtext 
in datetime (tried also with varchar) 
out varchar 
+0

Vous êtes certain que 'alfa' $> 0, non? – Matt

+0

oui maintenant je débogue avec alfa = 2 – lollo

Répondre

0
while($count < $alfa) { 
    $this->dbh->query("INSERT INTO `store_sess` SET `xpath` = '".$this->dbh->real_escape_string($arr_gc[$count][0])."', in = '".$this->dbh->real_escape_string($arr_gc[$count][1])."', out = '0000-00-00 00:00:00'"); 
    $count++; 
} 

Le code ci-dessus n'est pas très évolutive. Au lieu de cela, vous devez configurer votre requête dans son intégralité (vous pouvez faire plusieurs insertions avec une requête) et l'exécuter après que la chaîne de requête a été configurée.

MISE À JOUR

Votre boucle while est également inutile.

FIN MISE À JOUR

$insertVals = ""; 
for($count = 0; $count < $alfa, $count++) { 
    $insertVals = ($insertVals == "" ? "" : ", ") . 
     "('" . $this->dbh->real_escape_string($arr_gc[$count][0]) . "', '" . 
     $this->dbh->real_escape_string($arr_gc[$count][1]) . 
     "', '0000-00-00 00:00:00')"; 
} 

$query = "INSERT INTO `store_sess` (`xpath`, `in`, `out`) VALUES " . $insertVals; 
+0

merci ... vais l'essayer plus tard ... :) bye – lollo

+0

.. très bonne idée, merci .. mais je l'ai couru avec un petit changement '$ insertionVals. = ($ insertVals == ""? "": ",") ..... 'ecc .... (notez le point avant =) bye – lollo