public function getDeviceFallBackTree($wurflID)
 {
     if ($this->use_nested_set) {
         return $this->getDeviceFallBackTree_NS($wurflID);
     }
     $data = array();
     $this->numQueries++;
     $query = sprintf("CALL " . TeraWurflConfig::$TABLE_PREFIX . "_FallBackDevices(%s)", $this->SQLPrep($wurflID));
     $this->dbcon->multi_query($query);
     $i = 0;
     do {
         if ($res = $this->dbcon->store_result()) {
             $row = $res->fetch_row();
             $data[$i++] = unserialize($row[0]);
             $res->free();
         }
     } while ($this->dbcon->more_results() && $this->dbcon->next_result());
     if ($i == 0) {
         $tw = new TeraWurfl();
         $tw->toLog("Tera-WURFL Error: database fallback procedure returned no records, verify that " . TeraWurflConfig::$TABLE_PREFIX . "_FallBackDevices exists.", LOG_ERR, __CLASS__ . '::' . __FUNCTION__);
     } else {
         if ($data[$i - 1]['id'] != WurflConstants::NO_MATCH) {
             $tw = new TeraWurfl();
             $tw->toLog("WURFL Error: device {$data[$i - 1]['id']} falls back on an inexistent device: {$data[$i - 1]['fall_back']}", LOG_ERR, __CLASS__ . '::' . __FUNCTION__);
         }
     }
     return $data;
 }
示例#2
0
 public function multiQuery($sSQL)
 {
     $start = microtime(true);
     $this->connect();
     // Increase the counter
     $this->query_counter++;
     $result = $this->connection->multi_query(trim($sSQL));
     // FLUSH RESULTS
     // @TODO make these usable
     do {
         $r = $this->connection->store_result();
         if ($r) {
             $r->free();
         }
         if (!$this->connection->more_results()) {
             break;
         }
         //$this->connection->next_result();
     } while ($this->connection->next_result());
     $duration = microtime(true) - $start;
     $this->addQueryLog($sSQL, $duration);
     if (!$result) {
         //var_dump (debug_backtrace ());
         //$data = debug_backtrace ();
         //print_r ($data);
         //echo $sSQL;
         $ex = new DbException('MySQL Error: ' . $this->connection->error);
         $ex->setQuery($sSQL);
         throw $ex;
     } elseif ($result instanceof MySQLi_Result) {
         return new Result($result);
     }
     // Insert ID will return zero if this query was not insert or update.
     $this->insert_id = intval($this->connection->insert_id);
     // Affected rows
     $this->affected_rows = intval($this->connection->affected_rows);
     if ($this->insert_id > 0) {
         return $this->insert_id;
     }
     if ($this->affected_rows > 0) {
         return $this->affected_rows;
     }
     return $result;
 }
示例#3
0
 protected function _multiQuery($query)
 {
     $this->connect();
     $this->_driver->multi_query($query);
     if ($this->_driver->error) {
         throw new Miaox_SphinxQl_Connection_Exception('[' . $this->_driver->errno . '] ' . $this->_driver->error . ' [ ' . $query . ']');
     }
     $result = array();
     $count = 0;
     do {
         if (false !== ($resource = $this->_driver->store_result())) {
             $result[$count] = array();
             while (!is_null($row = $resource->fetch_assoc())) {
                 $result[$count][] = $row;
             }
             $resource->free_result();
         }
         $count++;
     } while ($this->_driver->more_results() && $this->_driver->next_result());
     return $result;
 }