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