PHP连接MSSQL类

网络整理 - 08-29

class DB_Handle {
    var $ClassName = "DB_Handle";
    var $Server;
    var $UserName;
    var $Password;
    var $Database;
    var $LinkID = 0;
    var $QueryResult = "";
    var $LastInsertID = "";
    /* private ignore=>ignore the error and continue, halt=>report the error and halt, report=>report the error and continue */
    var $Halt_On_Error = "report";
    var $Error = "";
    var $ErrNo = 0;
    /**public
     * remark: This is the db_mysql_class's structure
     * function: Set the server,username,password,database variable.
     */
    function DB_Handle($server = "", $username = "", $password = "", $database = "") {
        $this->Server = $server;
        $this->UserName = $username;
        $this->Password = $password;
        $this->Database = $database;
    }
    /**public
     * function: Connect database and select database
     * success: retun 1
     * failed: return 0
     */
    function connect() {
        $this->LinkID = @mssql_pconnect ( $this->Server, $this->UserName, $this->Password );
        if (! $this->LinkID) {
            $this->halt ( "mssql_pconnect($this->Server,$this->UserName,$this->Password): Failed" );
            return 0;
        }
        if (! @mssql_select_db ( $this->Database )) {
            $this->halt ( "mssql_select_db($this->Database) Failed." );
            return 0;
        }
        return 1;
    }
    /**public
     * function: Check the database, if exist then select
     * exist: return 1
     * not exist: return 0
     */
    function selectDatabase() {
        if (@mssql_select_db ( $this->Database ))
            return 1;
        else
            return 0;
    }
    /**public
     * function: Execute SQL instruction
     * success: return SQL Result.
     * failed: return 0;
     */
    function execQuery($sql = "") {
        $this->connect();
        if ($this->LinkID == 0) {
            $this->halt ( "Execute SQL Failed: Have not valid database connect." );
            return 0;
        }
        ob_start ();
        $this->QueryResult = mssql_query ( $sql, $this->LinkID );
        $error = ob_get_contents ();
        ob_end_clean ();
        if ($error) {
            $this->halt ( "Execute SQL: mssql_query($sql,$this->LinkID) failed." );
            return 0;
        }
        $reg = "#insert into#";
        if (preg_match ( $reg, $sql )) {
            $sql = "select @@IDENTITY as id";
            $res = mssql_query ( $sql, $this->LinkID );
            $this->LastInsertID = mssql_result ( $res, 0, id );
        }
        return $this->QueryResult;
    }
   
    /**public
     * function: Get the query result's row number
     * success: return the row fo the Result
     * failed: return 0
     */
    function getTotalRowNum($result = "") {
        if ($result != "")
            $this->QueryResult = $result;
        $row = @mssql_num_rows ( $this->QueryResult );
        if ($row >= 0)
            return $row;
        $this->halt ( "Get a row of result Failed: Result $result is invalid." );
        return 0;
    }
   
    /**public
     * function: Get the last insert record's id
     * success: return id
     * failed: return 0
     */
    function lastInsertID() {
        return $this->LastInsertID;
    }
   
    /**public
     * function: Get a field's value
     * success: return value of the field
     * failed: return 0
     */
    function getField($result = "", $row = 0, $field = 0) {
        if ($result != "")
            $this->QueryResult = $result;
        $fieldvalue = @mssql_result ( $this->QueryResult, $row, $field );
        if ($fieldvalue != "")
            return $fieldvalue;
        $this->halt ( "Get field: mssql_result($this->QueryResult,$row,$field) failed." );
        return 0;
       
    //Here should have error handle
    }
   
    /**public
     * function: Get next record
     * success: return a array of the record's value
     * failed: return 0
     */
    function nextRecord($result = "") {
        if ($result != "")
            $this->QueryResult = $result;
        $record = @mssql_fetch_array ( $this->QueryResult );
        if (is_array ( $record ))
            return $record;
            //$this->halt("Get the next record Failed: the Result $result is invalid.");
        return 0;
    }
   
    /**public
     * function: Free the Query Result
     * success return 1
     * failed: return 0
     */
    function freeResult($result = "") {
        if ($result != "")
            $this->QueryResult = $result;
        return @mssql_free_result ( $this->QueryResult );
    }
   
    /**public
     * function: Set the Halt_On_Error's state
     * success: return 1
     * failed: return 0
     */
    function setHaltOnError($state = "ignore") {
        if (! ($state == "ignore" || $state == "report" || $state == "halt")) {
            $this->halt ( "Set the Halt_On_Error Fail: There is no state value $state" );
            return 0;
        }
        $this->Halt_On_Error = $state;
        return 1;
    }
   
    /**public
     * function: Get the Halt_On_Error's state
     */
    function getHaltOnError() {
        return $this->Halt_On_Error;
    }
   
    /**public
     * function: Get the class's name
     */
    function toString() {
        return $this->ClassName;
    }
   
    /**private
     * function: Error handle
     */
    function halt($msg) {
        $this->Error = @mysql_error ( $this->LinkID );
        $this->ErrNo = @mysql_errno ( $this->LinkID );
        if ($this->Halt_On_Error == "ignore")
            return;
        $this->makeMsg ( $msg );
        if ($this->Halt_On_Error == "halt")
            die ( "Session halted" );
    }
   
    /**private
     * function: Make error information and print
     */
    function makeMsg($msg) {
        printf ( "Database error: %s\n", $msg );
        printf ( "MySQL Error: %s (%s)\n", $this->ErrNo, $this->Error );
    }
}