Changeset 82584 in spip-zone


Ignore:
Timestamp:
May 19, 2014, 5:16:58 PM (5 years ago)
Author:
fil@…
Message:

PDO ne marchant pas bien sur seenthis (impossible de faire SHOW META), je rebascule tout sur mysqli

Location:
_plugins_/indexer/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/indexer/trunk/indexer_fonctions.php

    r82575 r82584  
    110110
    111111    if ($orderby) {
     112        // permettre un order by (formule compliquee AS tseg) dans la boucle DATA
     113        if (preg_match(',^(.*) AS (\w+),i', $orderby, $r)) {
     114            $sq->select($r[0]);
     115            $orderby = str_replace($r[0], $r[2], $orderby);
     116        }
    112117        $sq->orderby($orderby);
    113118    }
  • _plugins_/indexer/trunk/lib/Sphinx/SphinxQL/SphinxQL.php

    r82579 r82584  
    99        private $host;
    1010        private $port;
    11         private $sql; // objet PDO
     11        private $sql; // objet MySQLi
    1212
    1313        public function __construct($host = '127.0.0.1', $port = 9306) {
     
    2222        public function connect() {
    2323                try {
    24                         $this->sql = new \PDO("mysql:host=" . $this->host . ";port=" . $this->port, "", "");
     24                        $this->sql = new \MySQLi($this->host, null, null, null, $this->port);
    2525                } catch (\Exception $e) {
    2626                        var_dump($e->getMessage());
     
    3737                        return false;
    3838                }
    39                 return $this->sql->query($query);
     39                return $this->sql->multi_query($query);
    4040        }
    4141
     
    6666                );
    6767
    68                 if ($docs = $this->query($query)) {
    69                         // les jeux de réponses sont les suivant :
     68                try {
     69                        $docs = $this->query($query);
     70
     71                        // les jeux de réponses sont les suivants :
    7072                        // 1) les documents trouvés
    7173                        // 2+) les FACET à la suite
    7274                        $reponses = array();
    73                          do {
    74                                 $reponses[] = $docs->fetchAll(\PDO::FETCH_ASSOC);
    75                         } while ($docs->nextRowset());
     75                        do {
     76                                if ($result = $this->sql->store_result()) {
     77                                        $reponses[] = $result->fetch_all(MYSQLI_ASSOC);
     78                                        $result->free();
     79                                }
     80                        } while ($this->sql->next_result());
    7681
    7782                        $liste['docs']   = array_shift($reponses);
    7883                        $liste['facets'] = $this->parseFacets($reponses);
    7984
    80                         $meta = $this->query('SHOW meta');
    81                         if ($errs = $this->sql->errorInfo()) {
    82                                 # TODO: comprendre le pourquoi de l'erreur
    83                                 # 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.
    84                                 var_dump($errs);
    85                         }
    86                         if ($meta) {
    87                                 $liste['meta']   = $this->parseMeta($meta->fetchAll(\PDO::FETCH_ASSOC));
    88                         }
    89                 } elseif ($errs = $this->sql->errorInfo()) {
    90                         var_dump($errs);
     85                } catch  (\Exception $e) {
     86                        echo "\n<div><tt>",htmlspecialchars($query),"</tt></div>\n";
     87                        var_dump($e->getMessage());
     88                        return false;
     89                }
     90
     91                // recuperer les META
     92                if ($meta = $this->query('SHOW META')) {
     93                        $result = $this->sql->store_result();
     94                        $liste['meta']   = $this->parseMeta($result->fetch_all(MYSQLI_ASSOC));
    9195                }
    9296
  • _plugins_/indexer/trunk/prive/squelettes/contenu/indexer.html

    r82568 r82584  
    1212                new Sphinx\SphinxQL\SphinxQL(SPHINX_SERVER_HOST, SPHINX_SERVER_PORT), SPHINX_DEFAULT_INDEX)
    1313        );
    14     } catch( PDOException $e ) {
     14    } catch( \Exception $e ) {
    1515        if (!$message = $e->getMessage())
    1616            $message = _L('Erreur inconnue');
Note: See TracChangeset for help on using the changeset viewer.