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...\n");
}
$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\n");
}
}
}
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\n", $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\n",
$this-Link_ID,$this-num_rows());
}
$this-Row +=1;
$errno=OCIError($this-Parse);
if(1403 == $errno) { # 1043 means no more records found
$this-Error="";
$this-disconnect();
$stat=0;
} else {
$this-Error=OCIError($this-Parse);
if($this-Debug) {
printf("Error: %s",
$this-Error["message"]);
}
$stat=0;
}
} else {
for($ix=1;$ixParse);$ix++) {
$col=strtoupper(OCIColumnname($this-Parse,$ix));
$colreturn=strtolower($col);
$this-Record[ "$colreturn" ] = $result["$col"];
if($this-Debug) echo"[$col]:".$result["$col"]."\n";
}
$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.nullable,".
"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[nullable] == '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];
$res[$i]["chars"] = $this-Record[char_col_decl_length];
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;
# $this-disconnect();
return $res;
}
function affected_rows() {
return OCIRowCount($this-Parse);
}
function num_rows() {
$iii=0;
while ($this-next_record()) {
$iii++;
}
OCIExecute($this-Parse);
return $iii