[ Index ] |
|
Code source de PHP NUKE 7.9 |
1 <?php 2 /*************************************************************************** 3 * oracle.php 4 * ------------------- 5 * begin : Thrusday Feb 15, 2001 6 * copyright : (C) 2001 The phpBB Group 7 * email : support@phpbb.com 8 * 9 * $Id: oracle.php,v 1.18 2002/01/28 17:24:45 psotfx Exp $ 10 * 11 ***************************************************************************/ 12 13 /*************************************************************************** 14 * 15 * This program is free software; you can redistribute it and/or modify 16 * it under the terms of the GNU General Public License as published by 17 * the Free Software Foundation; either version 2 of the License, or 18 * (at your option) any later version. 19 * 20 ***************************************************************************/ 21 22 if(!defined("SQL_LAYER")) 23 { 24 25 define("SQL_LAYER","oracle"); 26 27 class sql_db 28 { 29 30 var $db_connect_id; 31 var $query_result; 32 var $in_transaction = 0; 33 var $row = array(); 34 var $rowset = array(); 35 var $num_queries = 0; 36 var $last_query_text = ""; 37 38 // 39 // Constructor 40 // 41 function sql_db($sqlserver, $sqluser, $sqlpassword, $database="", $persistency = true) 42 { 43 $this->persistency = $persistency; 44 $this->user = $sqluser; 45 $this->password = $sqlpassword; 46 $this->server = $sqlserver; 47 $this->dbname = $database; 48 49 if($this->persistency) 50 { 51 $this->db_connect_id = @OCIPLogon($this->user, $this->password, $this->server); 52 } 53 else 54 { 55 $this->db_connect_id = @OCINLogon($this->user, $this->password, $this->server); 56 } 57 if($this->db_connect_id) 58 { 59 return $this->db_connect_id; 60 } 61 else 62 { 63 return false; 64 } 65 } 66 67 // 68 // Other base methods 69 // 70 function sql_close() 71 { 72 if($this->db_connect_id) 73 { 74 // Commit outstanding transactions 75 if($this->in_transaction) 76 { 77 OCICommit($this->db_connect_id); 78 } 79 80 if($this->query_result) 81 { 82 @OCIFreeStatement($this->query_result); 83 } 84 $result = @OCILogoff($this->db_connect_id); 85 return $result; 86 } 87 else 88 { 89 return false; 90 } 91 } 92 93 // 94 // Base query method 95 // 96 function sql_query($query = "", $transaction = FALSE) 97 { 98 // Remove any pre-existing queries 99 unset($this->query_result); 100 101 // Put us in transaction mode because with Oracle as soon as you make a query you're in a transaction 102 $this->in_transaction = TRUE; 103 104 if($query != "") 105 { 106 $this->last_query = $query; 107 $this->num_queries++; 108 109 if(eregi("LIMIT", $query)) 110 { 111 preg_match("/^(.*)LIMIT ([0-9]+)[, ]*([0-9]+)*/s", $query, $limits); 112 113 $query = $limits[1]; 114 if($limits[3]) 115 { 116 $row_offset = $limits[2]; 117 $num_rows = $limits[3]; 118 } 119 else 120 { 121 $row_offset = 0; 122 $num_rows = $limits[2]; 123 } 124 } 125 126 if(eregi("^(INSERT|UPDATE) ", $query)) 127 { 128 $query = preg_replace("/\\\'/s", "''", $query); 129 } 130 131 $this->query_result = @OCIParse($this->db_connect_id, $query); 132 $success = @OCIExecute($this->query_result, OCI_DEFAULT); 133 } 134 if($success) 135 { 136 if($transaction == END_TRANSACTION) 137 { 138 OCICommit($this->db_connect_id); 139 $this->in_transaction = FALSE; 140 } 141 142 unset($this->row[$this->query_result]); 143 unset($this->rowset[$this->query_result]); 144 $this->last_query_text[$this->query_result] = $query; 145 146 return $this->query_result; 147 } 148 else 149 { 150 if($this->in_transaction) 151 { 152 OCIRollback($this->db_connect_id); 153 } 154 return false; 155 } 156 } 157 158 // 159 // Other query methods 160 // 161 function sql_numrows($query_id = 0) 162 { 163 if(!$query_id) 164 { 165 $query_id = $this->query_result; 166 } 167 if($query_id) 168 { 169 $result = @OCIFetchStatement($query_id, $this->rowset); 170 // OCIFetchStatment kills our query result so we have to execute the statment again 171 // if we ever want to use the query_id again. 172 @OCIExecute($query_id, OCI_DEFAULT); 173 return $result; 174 } 175 else 176 { 177 return false; 178 } 179 } 180 function sql_affectedrows($query_id = 0) 181 { 182 if(!$query_id) 183 { 184 $query_id = $this->query_result; 185 } 186 if($query_id) 187 { 188 $result = @OCIRowCount($query_id); 189 return $result; 190 } 191 else 192 { 193 return false; 194 } 195 } 196 function sql_numfields($query_id = 0) 197 { 198 if(!$query_id) 199 { 200 $query_id = $this->query_result; 201 } 202 if($query_id) 203 { 204 $result = @OCINumCols($query_id); 205 return $result; 206 } 207 else 208 { 209 return false; 210 } 211 } 212 function sql_fieldname($offset, $query_id = 0) 213 { 214 // OCIColumnName uses a 1 based array so we have to up the offset by 1 in here to maintain 215 // full abstraction compatibitly 216 $offset += 1; 217 if(!$query_id) 218 { 219 $query_id = $this->query_result; 220 } 221 if($query_id) 222 { 223 $result = strtolower(@OCIColumnName($query_id, $offset)); 224 return $result; 225 } 226 else 227 { 228 return false; 229 } 230 } 231 function sql_fieldtype($offset, $query_id = 0) 232 { 233 // This situation is the same as fieldname 234 $offset += 1; 235 if(!$query_id) 236 { 237 $query_id = $this->query_result; 238 } 239 if($query_id) 240 { 241 $result = @OCIColumnType($query_id, $offset); 242 return $result; 243 } 244 else 245 { 246 return false; 247 } 248 } 249 function sql_fetchrow($query_id = 0, $debug = FALSE) 250 { 251 if(!$query_id) 252 { 253 $query_id = $this->query_result; 254 } 255 if($query_id) 256 { 257 $result_row = ""; 258 $result = @OCIFetchInto($query_id, $result_row, OCI_ASSOC+OCI_RETURN_NULLS); 259 if($debug) 260 { 261 echo "Query was: ".$this->last_query . "<br>"; 262 echo "Result: $result<br>"; 263 echo "Query ID: $query_id<br>"; 264 echo "<pre>"; 265 var_dump($result_row); 266 echo "</pre>"; 267 } 268 if($result_row == "") 269 { 270 return false; 271 } 272 273 for($i = 0; $i < count($result_row); $i++) 274 { 275 list($key, $val) = each($result_row); 276 $return_arr[strtolower($key)] = $val; 277 } 278 $this->row[$query_id] = $return_arr; 279 280 return $this->row[$query_id]; 281 } 282 else 283 { 284 return false; 285 } 286 } 287 // This function probably isn't as efficant is it could be but any other way I do it 288 // I end up losing 1 row... 289 function sql_fetchrowset($query_id = 0) 290 { 291 if(!$query_id) 292 { 293 $query_id = $this->query_result; 294 } 295 if($query_id) 296 { 297 $rows = @OCIFetchStatement($query_id, $results); 298 @OCIExecute($query_id, OCI_DEFAULT); 299 for($i = 0; $i <= $rows; $i++) 300 { 301 @OCIFetchInto($query_id, $tmp_result, OCI_ASSOC+OCI_RETURN_NULLS); 302 303 for($j = 0; $j < count($tmp_result); $j++) 304 { 305 list($key, $val) = each($tmp_result); 306 $return_arr[strtolower($key)] = $val; 307 } 308 $result[] = $return_arr; 309 } 310 return $result; 311 } 312 else 313 { 314 return false; 315 } 316 } 317 function sql_fetchfield($field, $rownum = -1, $query_id = 0) 318 { 319 if(!$query_id) 320 { 321 $query_id = $this->query_result; 322 } 323 if($query_id) 324 { 325 if($rownum > -1) 326 { 327 // Reset the internal rownum pointer. 328 @OCIExecute($query_id, OCI_DEFAULT); 329 for($i = 0; $i < $rownum; $i++) 330 { 331 // Move the interal pointer to the row we want 332 @OCIFetch($query_id); 333 } 334 // Get the field data. 335 $result = @OCIResult($query_id, strtoupper($field)); 336 } 337 else 338 { 339 // The internal pointer should be where we want it 340 // so we just grab the field out of the current row. 341 $result = @OCIResult($query_id, strtoupper($field)); 342 } 343 return $result; 344 } 345 else 346 { 347 return false; 348 } 349 } 350 function sql_rowseek($rownum, $query_id = 0) 351 { 352 if(!$query_id) 353 { 354 $query_id = $this->query_result; 355 } 356 if($query_id) 357 { 358 @OCIExecute($query_id, OCI_DEFAULT); 359 for($i = 0; $i < $rownum; $i++) 360 { 361 @OCIFetch($query_id); 362 } 363 $result = @OCIFetch($query_id); 364 return $result; 365 } 366 else 367 { 368 return false; 369 } 370 } 371 function sql_nextid($query_id = 0) 372 { 373 if(!$query_id) 374 { 375 $query_id = $this->query_result; 376 } 377 if($query_id && $this->last_query_text[$query_id] != "") 378 { 379 if( eregi("^(INSERT{1}|^INSERT INTO{1})[[:space:]][\"]?([a-zA-Z0-9\_\-]+)[\"]?", $this->last_query_text[$query_id], $tablename)) 380 { 381 $query = "SELECT ".$tablename[2]."_id_seq.currval FROM DUAL"; 382 $stmt = @OCIParse($this->db_connect_id, $query); 383 @OCIExecute($stmt,OCI_DEFAULT ); 384 $temp_result = @OCIFetchInto($stmt, $temp_result, OCI_ASSOC+OCI_RETURN_NULLS); 385 if($temp_result) 386 { 387 return $temp_result['CURRVAL']; 388 } 389 else 390 { 391 return false; 392 } 393 } 394 else 395 { 396 return false; 397 } 398 } 399 else 400 { 401 return false; 402 } 403 } 404 405 function sql_nextid($query_id = 0) 406 { 407 if(!$query_id) 408 { 409 $query_id = $this->query_result; 410 } 411 if($query_id && $this->last_query_text[$query_id] != "") 412 { 413 if( eregi("^(INSERT{1}|^INSERT INTO{1})[[:space:]][\"]?([a-zA-Z0-9\_\-]+)[\"]?", $this->last_query_text[$query_id], $tablename)) 414 { 415 $query = "SELECT ".$tablename[2]."_id_seq.CURRVAL FROM DUAL"; 416 $temp_q_id = @OCIParse($this->db_connect_id, $query); 417 @OCIExecute($temp_q_id, OCI_DEFAULT); 418 @OCIFetchInto($temp_q_id, $temp_result, OCI_ASSOC+OCI_RETURN_NULLS); 419 420 if($temp_result) 421 { 422 return $temp_result['CURRVAL']; 423 } 424 else 425 { 426 return false; 427 } 428 } 429 else 430 { 431 return false; 432 } 433 } 434 else 435 { 436 return false; 437 } 438 } 439 440 441 442 function sql_freeresult($query_id = 0) 443 { 444 if(!$query_id) 445 { 446 $query_id = $this->query_result; 447 } 448 if($query_id) 449 { 450 $result = @OCIFreeStatement($query_id); 451 return $result; 452 } 453 else 454 { 455 return false; 456 } 457 } 458 function sql_error($query_id = 0) 459 { 460 if(!$query_id) 461 { 462 $query_id = $this->query_result; 463 } 464 $result = @OCIError($query_id); 465 return $result; 466 } 467 468 } // class sql_db 469 470 } // if ... define 471 472 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Sun Apr 1 11:11:59 2007 | par Balluche grâce à PHPXref 0.7 |