[ Index ] |
|
Code source de vtiger CRM 5.0.2 |
1 <?php 2 /* 3 @version V4.90 8 June 2006 (c) 2000-2006 John Lim (jlim#natsoft.com.my). All rights reserved. 4 Released under both BSD license and Lesser GPL library license. 5 Whenever there is any discrepancy between the two licenses, 6 the BSD license will take precedence. 7 Contribution by Frank M. Kromann <frank@frontbase.com>. 8 Set tabs to 8. 9 */ 10 11 // security - hide paths 12 if (!defined('ADODB_DIR')) die(); 13 14 if (! defined("_ADODB_FBSQL_LAYER")) { 15 define("_ADODB_FBSQL_LAYER", 1 ); 16 17 class ADODB_fbsql extends ADOConnection { 18 var $databaseType = 'fbsql'; 19 var $hasInsertID = true; 20 var $hasAffectedRows = true; 21 var $metaTablesSQL = "SHOW TABLES"; 22 var $metaColumnsSQL = "SHOW COLUMNS FROM %s"; 23 var $fmtTimeStamp = "'Y-m-d H:i:s'"; 24 var $hasLimit = false; 25 26 function ADODB_fbsql() 27 { 28 } 29 30 function _insertid() 31 { 32 return fbsql_insert_id($this->_connectionID); 33 } 34 35 function _affectedrows() 36 { 37 return fbsql_affected_rows($this->_connectionID); 38 } 39 40 function &MetaDatabases() 41 { 42 $qid = fbsql_list_dbs($this->_connectionID); 43 $arr = array(); 44 $i = 0; 45 $max = fbsql_num_rows($qid); 46 while ($i < $max) { 47 $arr[] = fbsql_tablename($qid,$i); 48 $i += 1; 49 } 50 return $arr; 51 } 52 53 // returns concatenated string 54 function Concat() 55 { 56 $s = ""; 57 $arr = func_get_args(); 58 $first = true; 59 60 $s = implode(',',$arr); 61 if (sizeof($arr) > 0) return "CONCAT($s)"; 62 else return ''; 63 } 64 65 // returns true or false 66 function _connect($argHostname, $argUsername, $argPassword, $argDatabasename) 67 { 68 $this->_connectionID = fbsql_connect($argHostname,$argUsername,$argPassword); 69 if ($this->_connectionID === false) return false; 70 if ($argDatabasename) return $this->SelectDB($argDatabasename); 71 return true; 72 } 73 74 // returns true or false 75 function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename) 76 { 77 $this->_connectionID = fbsql_pconnect($argHostname,$argUsername,$argPassword); 78 if ($this->_connectionID === false) return false; 79 if ($argDatabasename) return $this->SelectDB($argDatabasename); 80 return true; 81 } 82 83 function &MetaColumns($table) 84 { 85 if ($this->metaColumnsSQL) { 86 87 $rs = $this->Execute(sprintf($this->metaColumnsSQL,$table)); 88 89 if ($rs === false) return false; 90 91 $retarr = array(); 92 while (!$rs->EOF){ 93 $fld = new ADOFieldObject(); 94 $fld->name = $rs->fields[0]; 95 $fld->type = $rs->fields[1]; 96 97 // split type into type(length): 98 if (preg_match("/^(.+)\((\d+)\)$/", $fld->type, $query_array)) { 99 $fld->type = $query_array[1]; 100 $fld->max_length = $query_array[2]; 101 } else { 102 $fld->max_length = -1; 103 } 104 $fld->not_null = ($rs->fields[2] != 'YES'); 105 $fld->primary_key = ($rs->fields[3] == 'PRI'); 106 $fld->auto_increment = (strpos($rs->fields[5], 'auto_increment') !== false); 107 $fld->binary = (strpos($fld->type,'blob') !== false); 108 109 $retarr[strtoupper($fld->name)] = $fld; 110 $rs->MoveNext(); 111 } 112 $rs->Close(); 113 return $retarr; 114 } 115 return false; 116 } 117 118 // returns true or false 119 function SelectDB($dbName) 120 { 121 $this->database = $dbName; 122 if ($this->_connectionID) { 123 return @fbsql_select_db($dbName,$this->_connectionID); 124 } 125 else return false; 126 } 127 128 129 // returns queryID or false 130 function _query($sql,$inputarr) 131 { 132 return fbsql_query("$sql;",$this->_connectionID); 133 } 134 135 /* Returns: the last error message from previous database operation */ 136 function ErrorMsg() 137 { 138 $this->_errorMsg = @fbsql_error($this->_connectionID); 139 return $this->_errorMsg; 140 } 141 142 /* Returns: the last error number from previous database operation */ 143 function ErrorNo() 144 { 145 return @fbsql_errno($this->_connectionID); 146 } 147 148 // returns true or false 149 function _close() 150 { 151 return @fbsql_close($this->_connectionID); 152 } 153 154 } 155 156 /*-------------------------------------------------------------------------------------- 157 Class Name: Recordset 158 --------------------------------------------------------------------------------------*/ 159 160 class ADORecordSet_fbsql extends ADORecordSet{ 161 162 var $databaseType = "fbsql"; 163 var $canSeek = true; 164 165 function ADORecordSet_fbsql($queryID,$mode=false) 166 { 167 if (!$mode) { 168 global $ADODB_FETCH_MODE; 169 $mode = $ADODB_FETCH_MODE; 170 } 171 switch ($mode) { 172 case ADODB_FETCH_NUM: $this->fetchMode = FBSQL_NUM; break; 173 case ADODB_FETCH_ASSOC: $this->fetchMode = FBSQL_ASSOC; break; 174 case ADODB_FETCH_BOTH: 175 default: 176 $this->fetchMode = FBSQL_BOTH; break; 177 } 178 return $this->ADORecordSet($queryID); 179 } 180 181 function _initrs() 182 { 183 GLOBAL $ADODB_COUNTRECS; 184 $this->_numOfRows = ($ADODB_COUNTRECS) ? @fbsql_num_rows($this->_queryID):-1; 185 $this->_numOfFields = @fbsql_num_fields($this->_queryID); 186 } 187 188 189 190 function &FetchField($fieldOffset = -1) { 191 if ($fieldOffset != -1) { 192 $o = @fbsql_fetch_field($this->_queryID, $fieldOffset); 193 //$o->max_length = -1; // fbsql returns the max length less spaces -- so it is unrealiable 194 $f = @fbsql_field_flags($this->_queryID,$fieldOffset); 195 $o->binary = (strpos($f,'binary')!== false); 196 } 197 else if ($fieldOffset == -1) { /* The $fieldOffset argument is not provided thus its -1 */ 198 $o = @fbsql_fetch_field($this->_queryID);// fbsql returns the max length less spaces -- so it is unrealiable 199 //$o->max_length = -1; 200 } 201 202 return $o; 203 } 204 205 function _seek($row) 206 { 207 return @fbsql_data_seek($this->_queryID,$row); 208 } 209 210 function _fetch($ignore_fields=false) 211 { 212 $this->fields = @fbsql_fetch_array($this->_queryID,$this->fetchMode); 213 return ($this->fields == true); 214 } 215 216 function _close() { 217 return @fbsql_free_result($this->_queryID); 218 } 219 220 function MetaType($t,$len=-1,$fieldobj=false) 221 { 222 if (is_object($t)) { 223 $fieldobj = $t; 224 $t = $fieldobj->type; 225 $len = $fieldobj->max_length; 226 } 227 $len = -1; // fbsql max_length is not accurate 228 switch (strtoupper($t)) { 229 case 'CHARACTER': 230 case 'CHARACTER VARYING': 231 case 'BLOB': 232 case 'CLOB': 233 case 'BIT': 234 case 'BIT VARYING': 235 if ($len <= $this->blobSize) return 'C'; 236 237 // so we have to check whether binary... 238 case 'IMAGE': 239 case 'LONGBLOB': 240 case 'BLOB': 241 case 'MEDIUMBLOB': 242 return !empty($fieldobj->binary) ? 'B' : 'X'; 243 244 case 'DATE': return 'D'; 245 246 case 'TIME': 247 case 'TIME WITH TIME ZONE': 248 case 'TIMESTAMP': 249 case 'TIMESTAMP WITH TIME ZONE': return 'T'; 250 251 case 'PRIMARY_KEY': 252 return 'R'; 253 case 'INTEGER': 254 case 'SMALLINT': 255 case 'BOOLEAN': 256 257 if (!empty($fieldobj->primary_key)) return 'R'; 258 else return 'I'; 259 260 default: return 'N'; 261 } 262 } 263 264 } //class 265 } // defined 266 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Sun Feb 25 10:22:19 2007 | par Balluche grâce à PHPXref 0.7 |