コード例 #1
0
ファイル: DBTest.php プロジェクト: Selwyn-b/elefant
 function test_args()
 {
     $cmp = array('one', 'two');
     $obj = (object) $cmp;
     $this->assertEquals($cmp, DB::args(array('one', 'two')));
     $this->assertEquals($cmp, DB::args(array(array('one', 'two'))));
     $this->assertEquals($cmp, DB::args(array($obj)));
 }
コード例 #2
0
ファイル: db.php プロジェクト: jasondavis/PHP-Classes
 /**
  * Internal read handler, which is used by all read functions
  * It also provides a pagination abstraction to the user
  *
  * @todo Find a better pagination abstraction
  *
  * @param string $query Query format string
  * @param mixed ... Query parameters
  * @return ressource MySQLi result of the query
  */
 public static final function _read($query)
 {
     $query = xsprintf($query, 'DB::_escape', '#');
     foreach (DB::$work as $q => $d) {
         if (isset(DB::$con[$q])) {
             DB::$cur =& DB::$con[$q];
             break;
         }
     }
     DB::$work = DB::$args = array();
     DB::$a = 0;
     if (empty(DB::$con[$q])) {
         $r = apc_fetch('database-' . $q);
         if ($q > 0) {
             $r = $r['slaves'];
             DB::_connect($r[array_rand($r)], $q);
         } else {
             DB::_connect($r, $q);
         }
         DB::$cur =& DB::$con[$q];
     }
     mysqli_select_db(DB::$cur, DB_NAME . $q);
     if (null !== DB::$pre_query) {
         mysqli_query(DB::$cur, DB::$pre_query);
         DB::$pre_query = null;
     }
     $s = microtime(true);
     if (array() === DB::$options) {
         if (false === ($res = mysqli_query(DB::$cur, $query, DB::$result))) {
             DB::_log($query);
         }
         DB::$result = 0;
     } else {
         if (empty(DB::$options['table'])) {
             $table = '_rndtbl' . rand(1000, 9999);
         } else {
             $table = DB::$options['table'];
         }
         $param = DB::$options['sort'];
         if (isset($opt['dir']) && 0 === strcasecmp($opt['dir'], 'desc')) {
             $param .= ' DESC';
         }
         if (false === ($res = mysqli_query(DB::$cur, 'CREATE TEMPORARY TABLE ' . $table . ' (KEY SORT(' . $param . ')) ' . $query))) {
             DB::_log($query);
         } else {
             $res->free();
             if (isset($opt['offset'])) {
                 $offset = (int) $opt['offset'];
             } else {
                 $offset = '0';
             }
             $res = mysqli_query(DB::$cur, 'ALTER TABLE ' . $table . ' ADD OFFSET INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, DROP INDEX SORT, ORDER BY ' . $param);
             $res->free();
             if (isset($opt['limit'])) {
                 $param .= ' LIMIT ';
                 $param .= (int) $opt['limit'];
             }
             $res = mysqli_query(DB::$cur, 'SELECT * FROM ' . $table . ' WHERE OFFSET >=' . $offset . ' ORDER BY OFFSET' . $limit, DB::$result);
         }
         DB::$options = array();
     }
     if (class_exists('FB')) {
         FB::log(microtime(true) - $s . " - " . $query);
     }
     return $res;
 }