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