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";
}

?>
posted @ 2018-07-22 23:39  EmrysChe  阅读(2014)  评论(0编辑  收藏  举报