PHP_OCI8使用示例


<?php

// see more in http://php.net/manual/en/book.oci8.php

$USERNAME = "system";
$PASSWORD = "password";
$SERVICE_NAME = "192.168.50.107/orcl";

// resource oci_connect ( string $username , string $password [, string $db [, string $charset [, int $session_mode ]]] )
// 連接數據庫
$conn = oci_connect($USERNAME, $PASSWORD, $SERVICE_NAME);

if($conn != false)
{
    echo "connect success\n";
    echo "Server Version:".oci_server_version($conn)."\n";
    echo "Client Version:".oci_client_version()."\n";

    $sql = "CREATE TABLE userinfo (id number(6,0),username varchar2(20),userpwd varchar2(20),email varchar2(30),regdate date)";
    // resource oci_parse ( resource $connection , string $query )
    // 配置 Oracle 語句預備執行
    // oci_parse() 在 connection 上配置 query 並返回語句標識符以用於 oci_bind_by_name(),oci_execute() 以及其它函數。
    $stid = oci_parse($conn, $sql);
    // bool oci_execute ( resource $stmt [, int $mode ] )
    // 執行一條語句
    // oci_execute() 執行一條之前被解析過的語句。可選參數 mode 允許定義執行模式(默認是 OCI_COMMIT_ON_SUCCESS)。如果不需要將語句自動提交,則需要把 mode 設為 OCI_DEFAULT。
    oci_execute($stid);

    $sql = "INSERT INTO userinfo VALUES (1,'emrys','23333','emrysche@110.com',to_char(sysdate))";
    $stid = oci_parse($conn, $sql);
    oci_execute($stid);

    $sql = "INSERT INTO userinfo VALUES (2,'oldking','666','emrysche@120.com',to_char(sysdate))";
    $stid = oci_parse($conn, $sql);
    oci_execute($stid);

    // bool oci_bind_by_name (resource $statement ,string $bv_name ,mixed &$variable [,int $maxlength= -1 [,int $type= SQLT_CHR ]])
    // 將PHP變量綁定variable到Oracle綁定變量占位符bv_name。綁定對於Oracle數據庫性能很重要,也是避免SQL注入安全性問題的一種方法。
    // type 參數告訴 Oracle 要使用什么樣的描述符。可能的值為:
    // SQLT_FILE - 對應於 BFILE;
    // SQLT_CFILE - 對應於 CFILE;
    // SQLT_CLOB - 對應於 CLOB;
    // SQLT_BLOB - 對應於 BLOB;
    // SQLT_ROWID - 對應於 ROWID;
    // SQLT_NTY - 對應於有名字的數據類型;
    // SQLT_INT - 對應於 integers;
    // SQLT_CHR - 對應於 VARCHARs;
    // SQLT_BIN - 對應於 RAW 列;
    // SQLT_LNG - 對應於 LONG 列;
    // SQLT_LBI - 對應於 LONG RAW 列;
    // SQLT_RSET - 對應於游標,是之前由 oci_new_cursor() 創建的。
    $stid = oci_parse($conn,"INSERT INTO userinfo (id,username,userpwd,email) VALUES(:id_bv,:username_bv,:userpwd_bv,:email_bv)");
    $id = 3;
    $username = "che";
    $userpwd = "999";
    $email = "77777@qq.com";

    oci_bind_by_name($stid, ":id_bv", $id);
    oci_bind_by_name($stid, ":username_bv", $username);
    oci_bind_by_name($stid, ":userpwd_bv", $userpwd);
    oci_bind_by_name($stid, ":email_bv", $email);
    oci_execute($stid);

    $sql = "UPDATE userinfo SET regdate = to_char(sysdate) WHERE id = 3";
    $stid = oci_parse($conn, $sql);
    oci_execute($stid);
    echo "UPDATE userinfo SET regdate = to_char(sysdate) WHERE id = 3\n";
    // int oci_num_rows ( resource $stmt )
    // 返回語句執行后受影響的行數。
    echo oci_num_rows($stid)." rows affected during statement execution\n";

    $sql = "SELECT * FROM userinfo";
    $stid = oci_parse($conn, $sql);
    oci_execute($stid);

    // int oci_fetch_all ( resource $statement , array &$output [, int $skip [, int $maxrows [, int $flags ]]] )
    // 獲取結果數據的所有行到一個數組
    // oci_fetch_all() 從一個結果中獲取所有的行到一個用戶定義的數組。oci_fetch_all() 返回獲取的行數,出錯則返回 FALSE。
    // skip 是從結果中獲取數據時,最開始忽略的行數(默認值是 0,即從第一行開始)。maxrows 是要讀取的行數,從第 skip 行開始(默認值是 -1,即所有行)。
    // flag 參數可以是下列值的任意組合:
    // OCI_FETCHSTATEMENT_BY_ROW
    // OCI_FETCHSTATEMENT_BY_COLUMN(默認值)
    // OCI_NUM
    // OCI_ASSOC
    if(($rows = oci_fetch_all($stid, $results)) != false)
    {
        // print_r($results);
        for ($i = 0; $i < count($results[ID]);$i++)
        {
            echo "ID:".$results[ID][$i].",USERNAME:".$results[USERNAME][$i].",USERPWD:".$results[USERPWD][$i].",EMAIL:".$results[EMAIL][$i].",REGDATE:".$results[REGDATE][$i]."\n";
        }
        
    }

    $sql = "SELECT username FROM userinfo";
    $stid = oci_parse($conn, $sql);
    oci_execute($stid);

    // array oci_fetch_array (resource $ statement [,int $ mode ])
    // 返回包含查詢的下一個結果集行的數組。每個數組條目對應於該行的一列。此函數通常在循環中調用,直到它返回FALSE,表示不再存在行。
    // 可選的第二個參數可以是以下常量的任意組合:
    // OCI_BOTH             返回包含關聯索引和數字索引的數組。這與OCI_ASSOC + OCI_NUM相同,是默認行為。
    // OCI_ASSOC            返回一個關聯數組。
    // OCI_NUM              返回一個數字數組。
    // OCI_RETURN_NULLS     為NULL字段創建元素。元素值將是PHP的NULL。
    // OCI_RETURN_LOBS      返回LOB的內容而不是LOB描述符。

    while (($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) != false)
    {
        foreach ($row as $item)
        {
            echo "$item\n";
        }
    }

    $sql = "SELECT * FROM userinfo";
    $stid = oci_parse($conn, $sql);
    // bool oci_define_by_name ( resource $statement , string $column_name , mixed &$variable [, int $type = SQLT_CHR ] )
    // 使用oci_fetch()將PHP變量與用於查詢提取的列相關聯。
    oci_define_by_name($stid, 'USERNAME', $result_username);
    oci_execute($stid);

    // bool oci_fetch ( resource $statement )
    // oci_fetch() 獲取下一行(對於 SELECT 語句)到內部結果緩沖區。
    while (oci_fetch($stid))
    {
        echo "$result_username\n";
    }

    $sql = "SELECT username,id FROM userinfo";
    $stid = oci_parse($conn, $sql);
    oci_execute($stid);
    while (oci_fetch($stid))
    {
        // mixed oci_result ( resource $statement , mixed $field )
        // 返回field當前行中的數據,由oci_fetch()獲取。
        echo oci_result($stid, 'ID').":".oci_result($stid, 'USERNAME')."\n";
    }

    $sql = "SELECT * FROM userinfo";
    $stid = oci_parse($conn, $sql);
    oci_execute($stid);
    $ncols = oci_num_fields($stid);
    for ($i = 1; $i <= $ncols; $i++)
    {
        // string oci_field_name ( resource $statement , int $field )
        // 返回與字段數字索引(從 1 開始)相對應的字段名。
        $column_name  = oci_field_name($stid, $i);
        // mixed oci_field_type ( resource $stmt , int $field )
        // 返回字段的數據類型。field 參數是字段的索引(從 1 開始)。
        $column_type  = oci_field_type($stid, $i);
        // int oci_field_size ( resource $stmt , mixed $field )
        // 以字節為單位返回字段的大小。field 參數的值可以是字段的索引(從 1 開始)或者字段名。
        $column_size  = oci_field_size($stid, $i);
        echo "column_name:".$column_name.",column_type".$column_type.",column_size:".$column_size."\n";
    }


    $sql = "DROP TABLE userinfo";
    $stid = oci_parse($conn, $sql);
    oci_execute($stid);

    // bool oci_free_statement ( resource $statement )
    // 釋放關聯於語句或游標的所有資源
    oci_free_statement($stid);
    // bool oci_close ( resource $connection )
    // oci_close() 將 Oracle 連接 connection 關閉。
    oci_close($conn);
}
else
{
    echo "connect fail\n";
}

?>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM