?? adodb-mysqli.inc.php
字號:
if ($rs === false) break; $retarr = array(); while (!$rs->EOF){ $fld = new ADOFieldObject(); $fld->name = $rs->fields[0]; $fld->type = $rs->fields[1]; // split type into type(length): if (preg_match("/^(.+)\((\d+)\)$/", $fld->type, $query_array)) { $fld->type = $query_array[1]; $fld->max_length = $query_array[2]; } else { $fld->max_length = -1; } $fld->not_null = ($rs->fields[2] != 'YES'); $fld->primary_key = ($rs->fields[3] == 'PRI'); $fld->auto_increment = (strpos($rs->fields[5], 'auto_increment') !== false); $fld->binary = (strpos($fld->type,'blob') !== false); if (!$fld->binary) { $d = $rs->fields[4]; $d = $rs->fields['Default']; if ($d != "" && $d != "NULL") { $fld->has_default = true; $fld->default_value = $d; } else { $fld->has_default = false; } } $retarr[strtoupper($fld->name)] = $fld; $rs->MoveNext(); } break; case ADODB_FETCH_ASSOC: case ADODB_FETCH_DEFAULT: case ADODB_FETCH_BOTH: $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; $rs = $this->Execute(sprintf($this->metaColumnsSQL, $table)); $ADODB_FETCH_MODE = $save; if ($rs === false) break; $retarr = array(); while (!$rs->EOF){ $fld = new ADOFieldObject(); $fld->name = $rs->fields['Field']; $fld->type = $rs->fields['Type']; // split type into type(length): if (preg_match("/^(.+)\((\d+)\)$/", $fld->type, $query_array)) { $fld->type = $query_array[1]; $fld->max_length = $query_array[2]; } else { $fld->max_length = -1; } $fld->not_null = ($rs->fields['Null'] != 'YES'); $fld->primary_key = ($rs->fields['Key'] == 'PRI'); $fld->auto_increment = (strpos($rs->fields['Extra'], 'auto_increment') !== false); $fld->binary = (strpos($fld->type,'blob') !== false); if (!$fld->binary) { $d = $rs->fields['Default']; if ($d != "" && $d != "NULL") { $fld->has_default = true; $fld->default_value = $d; } else { $fld->has_default = false; } } $retarr[strtoupper($fld->name)] = $fld; $rs->MoveNext(); } break; default: } if ($rs === false) return false; $rs->Close(); return $retarr; } return false; } // returns true or false function SelectDB($dbName) {// $this->_connectionID = $this->mysqli_resolve_link($this->_connectionID); $this->databaseName = $dbName; if ($this->_connectionID) { $result = @mysqli_select_db($this->_connectionID, $dbName); if (!$result) { ADOConnection::outp("Select of database " . $dbName . " failed. " . $this->ErrorMsg()); } return $result; } return false; } // parameters use PostgreSQL convention, not MySQL function &SelectLimit($sql, $nrows = -1, $offset = -1, $inputarr = false, $arg3 = false, $secs = 0) { $offsetStr = ($offset >= 0) ? "$offset," : ''; if ($secs) $rs =& $this->CacheExecute($secs, $sql . " LIMIT $offsetStr$nrows" , $inputarr , $arg3); else $rs =& $this->Execute($sql . " LIMIT $offsetStr$nrows" , $inputarr , $arg3); return $rs; } function Prepare($sql) { return $sql; $stmt = mysqli_prepare($this->_connectionID,$sql); if (!$stmt) return false; return array($sql,$stmt); } // returns queryID or false function _query($sql, $inputarr) { global $ADODB_COUNTRECS; if (is_array($sql)) { $stmt = $sql[1]; foreach($inputarr as $k => $v) { if (is_string($v)) $a[] = MYSQLI_BIND_STRING; else if (is_integer($v)) $a[] = MYSQLI_BIND_INT; else $a[] = MYSQLI_BIND_DOUBLE; $fnarr =& array_merge( array($stmt,$a) , $inputarr); $ret = call_user_func_array('mysqli_bind_param',$fnarr); } $ret = mysqli_execute($stmt); return $ret; } if (!$mysql_res = mysqli_query($this->_connectionID, $sql, ($ADODB_COUNTRECS) ? MYSQLI_STORE_RESULT : MYSQLI_USE_RESULT)) { if ($this->debug) ADOConnection::outp("Query: " . $sql . " failed. " . $this->ErrorMsg()); return false; } return $mysql_res; } /* Returns: the last error message from previous database operation */ function ErrorMsg() { if (empty($this->_connectionID)) $this->_errorMsg = @mysqli_error(); else $this->_errorMsg = @mysqli_error($this->_connectionID); return $this->_errorMsg; } /* Returns: the last error number from previous database operation */ function ErrorNo() { if (empty($this->_connectionID)) return @mysqli_errno(); else return @mysqli_errno($this->_connectionID); } // returns true or false function _close() { @mysqli_close($this->_connectionID); $this->_connectionID = false; } /* * Maximum size of C field */ function CharMax() { return 255; } /* * Maximum size of X field */ function TextMax() { return 4294967295; }} /*-------------------------------------------------------------------------------------- Class Name: Recordset--------------------------------------------------------------------------------------*/class ADORecordSet_mysqli extends ADORecordSet{ var $databaseType = "mysqli"; var $canSeek = true; function ADORecordSet_mysqli($queryID, $mode = false) { if ($mode === false) { global $ADODB_FETCH_MODE; $mode = $ADODB_FETCH_MODE; } switch ($mode) { case ADODB_FETCH_NUM: $this->fetchMode = MYSQLI_NUM; break; case ADODB_FETCH_ASSOC: $this->fetchMode = MYSQLI_ASSOC; break; case ADODB_FETCH_DEFAULT: case ADODB_FETCH_BOTH: default: $this->fetchMode = MYSQLI_ASSOC; break; } $this->ADORecordSet($queryID); } function _initrs() { // mysqli_num_rows only return correct number, depens // on the use of mysql_store_result and mysql_use_result if (!$this->Connection->executeOnly) { $this->_numOfRows = @mysqli_num_rows($this->_queryID); $this->_numOfFields = @mysqli_num_fields($this->_queryID); } else { $this->_numOfRows = 0; $this->_numOfFields = 0; } } function &FetchField($fieldOffset = -1) { $fieldnr = $fieldOffset; if ($fieldOffset != -1) { $fieldOffset = mysqi_field_seek($this->_queryID, $fieldnr); } $o = mysqli_fetch_field($this->_queryID); return $o; } function &GetRowAssoc($upper = true) { if ($this->fetchMode == MYSQLI_ASSOC && !$upper) return $this->fields; $row =& ADORecordSet::GetRowAssoc($upper); return $row; } /* Use associative array to get fields array */ function Fields($colname) { if ($this->fetchMode != MYSQLI_NUM) return @$this->fields[$colname]; if (!$this->bind) { $this->bind = array(); for ($i = 0; $i < $this->_numOfFields; $i++) { $o = $this->FetchField($i); $this->bind[strtoupper($o->name)] = $i; } } return $this->fields[$this->bind[strtoupper($colname)]]; } function _seek($row) { if ($this->_numOfRows == 0) return false; if ($row < 0) return false; mysqli_data_seek($this->_queryID, $row); $this->EOF = false; return true; } // 10% speedup to move MoveNext to child class // This is the only implementation that works now (23-10-2003). // Other functions return no or the wrong results. function MoveNext() { if ($this->EOF) return false; $this->_currentRow++; switch($this->fetchMode) { case MYSQLI_NUM: $this->fields = mysqli_fetch_array($this->_queryID); break; case MYSQLI_ASSOC: case MYSQLI_BOTH: $this->fields = mysqli_fetch_assoc($this->_queryID); break; default: } if (is_array($this->fields)) return true; $this->EOF = true; return false; } function _fetch() { // mysqli_fetch_array($this->_queryID, MYSQLI_NUM) does not // work (22-10-2003). But mysqli_fetch_array($this->_queryID) gives // int resulttype should default to MYSQLI_BOTH,but give MYSQLI_NUM. // $this->fields = mysqli_fetch_fields($this->_queryID); // $this->fields = mysqli_fetch_array($this->_queryID); //, $this->fetchMode); $this->fields = mysqli_fetch_assoc($this->_queryID); // $this->fetchMode); return is_array($this->fields); } function _close() { mysqli_free_result($this->_queryID); $this->_queryID = false; } function MetaType($t, $len = -1, $fieldobj = false) { if (is_object($t)) { $fieldobj = $t; $t = $fieldobj->type; $len = $fieldobj->max_length; } $len = -1; // mysql max_length is not accurate switch (strtoupper($t)) { case 'STRING': case 'CHAR': case 'VARCHAR': case 'TINYBLOB': case 'TINYTEXT': case 'ENUM': case 'SET': if ($len <= $this->blobSize) return 'C'; case 'TEXT': case 'LONGTEXT': case 'MEDIUMTEXT': return 'X'; // php_mysql extension always returns 'blob' even if 'text' // so we have to check whether binary... case 'IMAGE': case 'LONGBLOB': case 'BLOB': case 'MEDIUMBLOB': return !empty($fieldobj->binary) ? 'B' : 'X'; case 'YEAR': case 'DATE': return 'D'; case 'TIME': case 'DATETIME': case 'TIMESTAMP': return 'T'; case 'INT': case 'INTEGER': case 'BIGINT': case 'TINYINT': case 'MEDIUMINT': case 'SMALLINT': if (!empty($fieldobj->primary_key)) return 'R'; else return 'I'; // Added floating-point types // Maybe not necessery. case 'FLOAT': case 'DOUBLE': // case 'DOUBLE PRECISION': case 'DECIMAL': case 'DEC': case 'FIXED': default: return 'N'; } } } }?>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -