| | |
| | |
¡¡¡¡putenv("ORACLE_SID=oracle8"); ¡¡¡¡putenv("ORACLE_HOME=/oracle/product/release/8.1.5"); ¡¡¡¡class db_sql { ¡¡¡¡var $Debug = 0; ¡¡¡¡var $sqoe = 1; // sqoe= show query on error
¡¡¡¡var $Database = "dev"; ¡¡¡¡var $User = "scott"; ¡¡¡¡var $Password = "tiger"; ¡¡¡¡var $Link_ID = 0; ¡¡¡¡var $Record = array(); ¡¡¡¡var $Row; ¡¡¡¡var $numRow; ¡¡¡¡var $Parse; ¡¡¡¡var $Error = ""; ¡¡¡¡function connect() { ¡¡¡¡if ( 0 == $this->Link_ID ) { ¡¡¡¡ if($this->Debug) { ¡¡¡¡ printf(" Connecting to $this->Database... "); ¡¡¡¡ } ¡¡¡¡ $this->Link_ID=OCILogon("$this->User","$this->Password");
¡¡¡¡ if (!$this->Link_ID) { ¡¡¡¡ $this->halt("Link-ID == false " . ¡¡¡¡ "($this->Link_ID), OCILogon failed"); ¡¡¡¡ } ¡¡¡¡ if($this->Debug) { ¡¡¡¡ printf(" Obtained the Link_ID: $this->Link_ID "); ¡¡¡¡ } ¡¡¡¡ } ¡¡¡¡ } ¡¡¡¡ function query($Query_String) { ¡¡¡¡ if($Query_String=="") ¡¡¡¡ { ¡¡¡¡ echo "Ö´ÐÐÓï¾ä²»ÄÜΪ¿Õ£¡"; ¡¡¡¡ return false; ¡¡¡¡ } ¡¡¡¡ $this->connect();
¡¡¡¡ $this->Parse=OCIParse($this->Link_ID,$Query_String);
¡¡¡¡ if(!$this->Parse) { ¡¡¡¡ $this->Error=OCIError($this->Parse); ¡¡¡¡ } else { OCIExecute($this->Parse); ¡¡¡¡ $this->Error=OCIError($this->Parse); ¡¡¡¡ } ¡¡¡¡ $this->Row=0;
¡¡¡¡ if($this->Debug) { ¡¡¡¡ printf("Debug: query = %s ", $Query_String); ¡¡¡¡ } ¡¡¡¡ if ($this->Error["code"]!=1403 && $this->Error["code"]!=0 && $this->sqoe) ¡¡¡¡ echo " ¡¡¡¡".$this->Error["message"]." ¡¡¡¡Query :"$Query_String""; ¡¡¡¡ $numRow=OCIRowCount($this->Parse); ¡¡¡¡ return $this->Parse; ¡¡¡¡ } ¡¡¡¡ function next_record() { ¡¡¡¡ if(0 == OCIFetchInto($this->Parse,$result,OCI_ASSOC+OCI_RETURN_NULLS)) { ¡¡¡¡ if ($this->Debug) { ¡¡¡¡ printf(" ID: %d,Rows: %d ", ¡¡¡¡ $this->Link_ID,$this->num_rows()); ¡¡¡¡ } ¡¡¡¡ $this->Row +=1;
¡¡¡¡ $errno=OCIError($this->Parse); ¡¡¡¡ if(1403 == $errno) { # 1043 means no more records found ¡¡¡¡ $this->Error=""; ¡¡¡¡ $stat=0; ¡¡¡¡ } else { ¡¡¡¡ $this->Error=OCIError($this->Parse); ¡¡¡¡ if($this->Debug) { ¡¡¡¡ printf(" Error: %s", ¡¡¡¡ $this->Error["message"]); ¡¡¡¡ } ¡¡¡¡ $stat=0; ¡¡¡¡ } ¡¡¡¡ } else { ¡¡¡¡ for($ix=1;$ix<=OCINumcols($this->Parse);$ix++) { ¡¡¡¡ $col=strtoupper(OCIColumnname($this->Parse,$ix)); ¡¡¡¡ $colreturn=strtolower($col); ¡¡¡¡ $this->Record[ "$colreturn" ] = $result["$col"]; ¡¡¡¡ } ¡¡¡¡ $stat=1; ¡¡¡¡ } ¡¡¡¡ return $stat; ¡¡¡¡ } ¡¡¡¡ function record_exist() { ¡¡¡¡ if(0 == OCIFetchInto($this->Parse,$result)) { ¡¡¡¡ return 0; ¡¡¡¡ } else { ¡¡¡¡ return 1; ¡¡¡¡ } ¡¡¡¡ return $stat; ¡¡¡¡ } ¡¡¡¡ function seek($pos) { ¡¡¡¡ $this->Row=$pos; ¡¡¡¡ } ¡¡¡¡ function metadata($table,$full=false) { ¡¡¡¡ $count = 0; ¡¡¡¡ $id = 0; ¡¡¡¡ $res = array(); ¡¡¡¡ /* ¡¡¡¡ * Due to compatibility problems with Table we changed the behavior ¡¡¡¡ * of metadata(); ¡¡¡¡ * depending on $full, metadata returns the following values: ¡¡¡¡ * ¡¡¡¡ * - full is false (default): ¡¡¡¡ * $result[]: ¡¡¡¡ * [0]["table"] table name ¡¡¡¡ * [0]["name"] field name ¡¡¡¡ * [0]["type"] field type ¡¡¡¡ * [0]["len"] field length ¡¡¡¡ * [0]["flags"] field flags ("NOT NULL", "INDEX") ¡¡¡¡ * [0]["format"] precision and scale of number (eg. "10,2") or empty ¡¡¡¡ * [0]["index"] name of index (if has one) ¡¡¡¡ * [0]["chars"] number of chars (if any char-type) ¡¡¡¡ * ¡¡¡¡ * - full is true ¡¡¡¡ * $result[]: ¡¡¡¡ * ["num_fields"] number of metadata records ¡¡¡¡ * [0]["table"] table name ¡¡¡¡ * [0]["name"] field name ¡¡¡¡ * [0]["type"] field type ¡¡¡¡ * [0]["len"] field length ¡¡¡¡ * [0]["flags"] field flags ("NOT NULL", "INDEX") ¡¡¡¡ * [0]["format"] precision and scale of number (eg. "10,2") or empty ¡¡¡¡ * [0]["index"] name of index (if has one) ¡¡¡¡ * [0]["chars"] number of chars (if any char-type) ¡¡¡¡ * ["meta"][field name] index of field named "field name" ¡¡¡¡ * The last one is used, if you have a field name, but no index. ¡¡¡¡ * Test: if (isset($result['meta']['myfield'])) {} ... ¡¡¡¡ */ ¡¡¡¡ $this->connect(); ¡¡¡¡ ## This is a RIGHT OUTER JOIN: "(+)", if you want to see, what ¡¡¡¡ ## this query results try the following:
¡¡¡¡ ## $table = new Table; $db = new my_DB_Sql; # you have to make ¡¡¡¡ ## # your own class ¡¡¡¡ ## $table->show_results($db->query(see query vvvvvv)) ¡¡¡¡ ## ¡¡¡¡ $this->query("SELECT T.table_name,T.column_name,T.data_type,". ¡¡¡¡ "T.data_length,T.data_precision,T.data_scale,T.able,". ¡¡¡¡ "T.char_col_decl_length,I.index_name". ¡¡¡¡ " FROM ALL_TAB_COLUMNS T,ALL_IND_COLUMNS I". ¡¡¡¡ " WHERE T.column_name=I.column_name (+)". ¡¡¡¡ " AND T.table_name=I.table_name (+)". ¡¡¡¡ " AND T.table_name=UPPER('$table') ORDER BY T.column_id"); ¡¡¡¡ $i=0; ¡¡¡¡ while ($this->next_record()) { ¡¡¡¡ $res[$i]["table"] = $this->Record[table_name]; ¡¡¡¡ $res[$i]["name"] = strtolower($this->Record[column_name]); ¡¡¡¡ $res[$i]["type"] = $this->Record[data_type]; ¡¡¡¡ $res[$i]["len"] = $this->Record[data_length]; ¡¡¡¡ if ($this->Record[index_name]) $res[$i]["flags"] = "INDEX "; ¡¡¡¡ $res[$i]["flags"] .= ( $this->Record[able] == 'N') ? ' : 'NOT NULL'; ¡¡¡¡ $res[$i]["format"]= (int)$this->Record[data_precision].",". ¡¡¡¡ (int)$this->Record[data_scale]; ¡¡¡¡ if ("0,0"==$res[$i]["format"]) $res[$i]["format"]='; ¡¡¡¡ $res[$i]["index"] = $this->Record[index_name]; ¡¡¡¡ if ($full) { ¡¡¡¡ $j=$res[$i]["name"]; ¡¡¡¡ $res["meta"][$j] = $i; ¡¡¡¡ $res["meta"][strtoupper($j)] = $i; ¡¡¡¡ } ¡¡¡¡ if ($full) $res["meta"][$res[$i]["name"]] = $i; ¡¡¡¡ $i++; ¡¡¡¡ } ¡¡¡¡ if ($full) $res["num_fields"]=$i;
¡¡¡¡ return $res; ¡¡¡¡ } ¡¡¡¡ function affected_rows() { ¡¡¡¡ return OCIRowCount($this->Parse); ¡¡¡¡ } ¡¡¡¡ function num_rows() { ¡¡¡¡ $iii=0; ¡¡¡¡ while ($this->next_record()) { ¡¡¡¡ $iii++; ¡¡¡¡ } ¡¡¡¡ OCIExecute($this->Parse); ¡¡¡¡ return $iii; ¡¡¡¡ } ¡¡¡¡ function record_rows($tablename,$condition) {
¡¡¡¡ else ¡¡¡¡ return 0; ¡¡¡¡ } ¡¡¡¡ function num_fields() { ¡¡¡¡ return OCINumcols($this->Parse); ¡¡¡¡ } ¡¡¡¡ function nf() { ¡¡¡¡ return $this->num_rows(); ¡¡¡¡ } ¡¡¡¡ function np() { ¡¡¡¡ print $this->num_rows(); ¡¡¡¡ } ¡¡¡¡ function f($Name) { ¡¡¡¡ return $this->Record[$Name]; ¡¡¡¡ } ¡¡¡¡ function p($Name) { ¡¡¡¡ print $this->Record[$Name]; ¡¡¡¡ } ¡¡¡¡ function commit() ¡¡¡¡ { ¡¡¡¡ return OCICommit($this->Link_ID); ¡¡¡¡ } ¡¡¡¡ function disconnect() { ¡¡¡¡ if($this->Debug) { ¡¡¡¡ printf("Disconnecting... "); ¡¡¡¡ } ¡¡¡¡ OCILogoff($this->Link_ID); ¡¡¡¡ } ¡¡¡¡ function halt($msg) { ¡¡¡¡ printf(" Database error: %s ", $msg); ¡¡¡¡ printf("ORACLE Error: %s ", ¡¡¡¡ $this->Error["message"]); ¡¡¡¡ die("Session halted."); ¡¡¡¡ } ¡¡¡¡ function lock($table, $mode = "write") {
¡¡¡¡ if ($mode == "write") { ¡¡¡¡ $Parse=OCIParse($this->Link_ID,"lock table $table in row exclusive mode"); ¡¡¡¡ OCIExecute($Parse); ¡¡¡¡ } else { ¡¡¡¡ $result = 1; ¡¡¡¡ } ¡¡¡¡ return $result; ¡¡¡¡ } ¡¡¡¡ function unlock() { ¡¡¡¡ return $this->query("commit"); ¡¡¡¡ } ¡¡¡¡ function table_names() { ¡¡¡¡ $this->connect(); ¡¡¡¡ $this->query(" ¡¡¡¡ SELECT table_name,tablespace_name ¡¡¡¡ FROM user_tables"); ¡¡¡¡ $i=0; ¡¡¡¡ while ($this->next_record()) ¡¡¡¡ { ¡¡¡¡ $info[$i]["table_name"] =$this->Record["table_name"]; ¡¡¡¡ $info[$i]["tablespace_name"]=$this->Record["tablespace_name"]; ¡¡¡¡ $i++; ¡¡¡¡ } ¡¡¡¡ return $info; ¡¡¡¡ } ¡¡¡¡}
| |
|
|
| |
| |
|