php与oracle数据库
㈠ Linux和Win安装php和Oracle有何特点
在Linux和Windows上安装PHP和Oracle时,重点在于简化配置流程,确保无需设置不必要的Oracle变量,如ORACLE_HOME和ORACLE_SID。具体步骤如下:
在配置文件php.ini中,确保将OCI8扩展设为启用状态,即去掉注释:extension=php_oci8.dll。同时,调整extension_dir指令至完整的PHP扩展DLL路径。对于PHP 4,DLL位于软件的"extensions"子目录;PHP 5则位于"ext"目录下。
重启Apache服务器。通过创建一个简单的PHP脚本并将其放置于web服务器可访问的位置,来验证扩展是否成功配置。使用浏览器访问脚本的URL,页面应显示"OCI8 Support enabled",以此证明OCI8支持已启用。
为了在Linux上添加Oracle连接,需要对PHP进行重新编译。访问开源开发者中心获取关于在Linux上安装Oracle、PHP和Apache的详细指导,其中介绍了安装传统、完整Oracle 10g版本的方法(无需使用Instant Client)。
下载并安装Apache。例如,在主目录下安装Apache:cd apache_1.3.31 ./configure --enable-mole=so --prefix=$HOME/apache --with-port=8888 make make install
编辑配置文件$HOME/apache/conf/httpd.conf,添加以下内容:AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps
㈡ PHP如何连接oracle数据库
首先你要在php.ini文件中找到
extension=php_oci8.dll 前面的注释符号“;”去掉,使php能够加载支持oracle的模块;
下面的代码是调试通过的,可直接使用的:
<html>
<body>
<?php
$dbconn=OCILogon("root","pass","(DESCRIPTION=(ADDRESS=(PROTOCOL =TCP)(HOST=远程IP)(PORT = 1521))(CONNECT_DATA =(SID=GZXNCW)))");
if($dbconn!=false)
{
echo "连接成功";
if(OCILogOff($dbconn)==true)
{
echo "关闭连接成功!";
}
}
else
{
echo "连接失败";
}
?>
</body>
</html>
<?php
$dbconn=oci_connect("你的账号","你的密码","你的数据库名称");//请把中文件设置为你的值;
$stmt=oci_parse($dbconn, "select * from scott.hallo");
oci_execute($stmt, OCI_DEFAULT);
echo $conn."----selecting\n\n";
while (oci_fetch($stmt))
{
echo ($conn."[".oci_result($stmt, "TEST")."]\n\n");
}
echo ($conn . "----done\n\n");
?>
㈢ 程序PHP,数据库ORACLE 连接方式PDO,日期字段为DATE型,数据是2011-10-18;页面输出是11-10月-11
应该有两种处理方式吧,oracle 的to_char(日期,‘yyyy-mm-dd’)转换为你想要的格式为字符串,直接用php 输出。
或者是 把oracle的 时间转换为时间戳然后 用PHP转成你想要的格式吧
㈣ php及数据库
PHP调用三种数据库的方法
本文比较详细的介绍PHP调用Mysql、ODBC以及ORACLE数据库。
MySQL是一个小巧灵珑的数据库服务器软件,对于中、小型应用系统是非常理想的。除了支持标准的ANSI SQL语句外,最重要的是,它还支持多种平台,而在Unix/Linux系统上,MySQL支持多线程运行方式,从而能获得相当好的性能。它和PHP、 Apache一样,是属于开放源代码软件。其官方网站是:,上面提供Windows,Linux,Unix版本的源代码的下载。
注意,MySQL访问函数都需要有相应的权限才能运行。常用的相关函数介绍如下:
(1)integer mysql_connect(主机,用户名,口令);
此函数开始一个对指定主机上的MySQL数据库的连接。若该数据库位于一个不同地端口,则在主机名后加上冒号和端口号。所有参数均为可选的,缺省情况下分别对应为本地主机、用户正在执行的脚本名和空。主机可以是IP地址或域名。
在脚本执行结束时,连接被自动关闭,也可以用mysql_close提前关闭。
(2)boolean mysql_create_db(数据库名);
创建一个数据库。注意必须用一个带有创建数据库许可权的帐号打开连接。
(3)boolean mysql_select_db(数据库名,连接号);
选择缺省数据库。
(4)integer mysql_query(SQL语句,连接号);
对指定数据库进行查询。如果SQL语句是select,则返回一个结果号,否则返回的值可以不理会。如果失败,返回false.。
(5)array mysql_fetch_array(结果号);
取出下一行,返回一个数组.可以用数字下标访问(第一个字段是下标 0),也可以用字符串下标访问(即使用各字段名)。如已取了最后一行,返回 false.。
(6)mysql_fetch_row(结果号);
返回一个矩阵代表结果集中一行的所有域。每次调用都会产生下一行,直到没有行剩下时返回false。每个域值都由一个从零开始的偏移量索引。这是从查询中获取结果的最快方法。
(7)integer mysql_num_rows(结果号);
返回结果集中行的数目
(8)integer mysql_num_fields(结果号);
返回结果集中域的数目。
(9)integer mysql_list_dbs();
向服务器查询数据库列表。它返回一个结果指针,该指针可用于mysql_fetch_row函数及类似函数。
(10)mysql_list_tables(数据库名);
获取一个指向指定数据库的表单列表的结果指针。该结果指针可用于任何从结果集中获取行的函数。
(11)mysql_close(连接号);
关闭对数据库的连接。连接必须是由mysql_connect打开的。该函数的使用不是严格必需的,因为在脚本结束时,所有非永久链路都会被自动关闭。
(12)mysql_pconnect(主机,用户名,口令);
与mysql_connect完全相似,但建立一个"永久连接",该连接一经建立永不关闭,即使使用mysql_close函数或程序执行完毕也不关闭.下一次试图建立永久连接时,系统如发现已存在一个永久连接,则直接返回该连接号而不重新创建。
下面是一个调用MYSQL数据库并分页显示的例子。
<?
$pagesize = 5; //每页显示5条记录
$host="localhost";
$user="user";
$password="psw";
$dbname="book"; //所查询的库表名;
//连接MySQL数据库
mysql_connect("$host","$user","$password") or die("无法连接MySQL数据库服务器!");
$db = mysql_select_db("$dbname") or die("无法连接数据库!");
$sql = "select count(*) as total from pagetest";//生成查询记录数的SQL语句
$rst = mysql_query($sql) or die("无法执行SQL语句:$sql !"); //查询记录数
$row = mysql_fetch_array($rst) or die("没有更多的记录!"); /取出一条记录
$rowcount = $row["total"];//取出记录数
mysql_free_result($rst) or die("无法释放result资源!"); //释放result资源
$pagecount = bcdiv($rowcount+$pagesize-1,$pagesize,0);//算出总共有几页
if(!isset($pageno)) {
$pageno = 1; //在没有设置pageno时,缺省为显示第1页
}
if($pageno<1) {
$pageno = 1; //若pageno比1小,则把它设置为1
}
if($pageno>$pagecount) {
$pageno = $pagecount; //若pageno比总共的页数大,则把它设置为最后一页
}
if($pageno>0) {
$href = eregi_replace("%2f","/",urlencode($PHP_SELF));//把$PHP_SELF转换为可以在URL上使用的字符串,这样的话就可以处理中文目录或中文文件名
if($pageno>1){//显示上一页的裢接
echo "<a href="" . $href . "?pageno=" . ($pageno-1) . "">上一页</a> ";
}
else{
echo "上一页";
}
for($i=1;$i<$pageno;$i++){
echo "<a href="" . $href . "?pageno=" . $i . "">" . $i . "</a> ";
}
echo $pageno . " ";
for($i++;$i<=$pagecount;$i++){
echo "<a href="" . $href . "?pageno=" . $i . "">" . $i . "</a> ";
}
if($pageno<$pagecount){//显示下一页的裢接
echo "<a href="" . $href . "?pageno=" . ($pageno+1) . "">下一页</a> ";
}
else{
echo "下一页 ";
}
$offset = ($pageno-1) * $pagesize;//算出本页第一条记录在整个表中的位置(第一条记录为0)
$sql = "select * from pagetest LIMIT $offset,$pagesize";//生成查询本页数据的SQL语句
$rst = mysql_query($sql);//查询本页数据
$num_fields = mysql_num_fields($rst);//取得字段总数
$i = 0;
while($i<$num_fields){//取得所有字段的名字
$fields[$i] = mysql_field_name($rst,$i);//取得第i+1个字段的名字
$i++;
}
echo "<table border="1" cellspacing="0" cellpadding="0">";//开始输出表格
echo "<tr>";
reset($fields);
while(list(,$field_name)=each($fields)){//显示字段名称
echo "<th>$field_name</th>";
}
echo "</tr>";
while($row=mysql_fetch_array($rst)){//显示本页数据
echo "<tr>";
reset($fields);
while(list(,$field_name)=each($fields)){//显示每个字段的值
$field_value = $row[$field_name];
if($field_value==""){
echo "<td> </td>";
}
else{
echo "<td>$field_value</td>";
}
}
echo "</tr>";
}
echo "</table>";//表格输出结束
mysql_free_result($rst) or die("无法释放result资源!");//释放result资源
}
else{
echo "目前该表中没有任何数据!";
}
mysql_close($server) or die("无法与服务器断开连接!");//断开连接并释放资源
?>
开放数据库连接(ODBC)已成为一种与数据库进行通信的工业标准。PHP也提供了标准的接口,使得PHP能调用Access,SQL SERVER等数据库。其相关函数是:
(1)integer odbc_connect(string dsn, string user, string password)
连接到一个ODBC数据库源名字上。
(2)integer odbc_exec(integer connection, string query)或 odbc_do(integer connection, string query)
在一个连接上执行查询。
(3)boolean odbc_fetch_row(integer result, integer row)
从一个结果集中获取一行数据。Row参数是可选的,若为空缺,则返回下一个有效行。在结果集中不再剩余行时返回false。
(4)boolean odbc_close(integer connection)
关闭一个数据库的连接。若在该连接上有打开的事务,则返回一个错误,而且连接不会被关闭。
最后,还是看个分页的例子:
<?
//设定每页显示条数
$show_num = 10;
$spages = $pages;//避免$pages后期被改变
//定义连接
$dsn = "localhost";
$user = "sa";
$password = "";
//计算总记录数
$rs_num = "select count(*) as id from bbs where zu='0' and lei='".$lei."'";
$conn_id = odbc_connect($dsn,$user,$password);
$rnum = odbc_exec($conn_id,$rs_num);
while(odbc_fetch_row($rnum)){
$total_rs = odbc_result($rnum,"id");//将总记录数放入$total_rs变量
}
//计算与页有关的条数
$nnn = $total_rs / $show_num;//计算总页数
$hnnn = intval($nnn);//将总页数取整
$cnnnn = $nnn - $hnnn;
//计算所需总页数
switch ($cnnn){
case "0":
$hnnn++;
$nnn = $hnnn;//总页数
break;
default :
$nnn = $hnnn;//总页数
break;
};
if ($nnn == 0)$nnn++;
//计算页面改变所需的条件
$fore = $pages;
$next = $pages;
$fore -= 1;
$next += 1;
if ($fore > 0) {
echo "<a>首页</a>";
echo "<a>前页</a>";
};
if ($pages < $nnn) {
echo "<a>后页</a>";
echo "<a>尾页</a>";
};
echo "共".$nnn."页";
$query_string = "SELECT * FROM table where condition order by you wanted order";
$cur = odbc_exec($conn_id,$query_string);
//取到循环的顶部
$cnum = ($pages-1) * $show_num;//计算当前的记录游标的位置
//空循环到显示记录游标处
if ($cnum != 0){
for ($i=0;$i<=$cnum;odbc_fetch_row($cur));
};
$i=1;
//显示记录
while(odbc_fetch_row($cur)){
echo ;
if ($i == $show_num){//在不满页数时跳出程序
break;
};
$i++;
};
//关闭连接
odbc_close($conn_id);
?>
Oracle(甲骨文)是世界上最为流行的关系数据库。它是大公司推崇的工业化的强有力的引擎。我们先看看其相关的函数:
(1)integer ora_logon(string user , string password)
开始对一个Oracle数据库服务器的连接。
(2)integer ora_open(integer connection)
打开给出的连接的游标。
(3)integer ora_do(integer connection, string query)
在给出的连接上执行查询。PHP生成一个指示器,解析查询,并执行之。
(4)integer ora_parse(integer cursor, string query)
解析一个查询并准备好执行。
(5)boolean ora_exec(integer cursor)
执行一个先前由ora_parse函数解析过的查询。
(6)boolean ora_fetch(integer cursor)
此函数会使得一个执行过的查询中的行被取到指示器中。这使得您可以调用ora_getcolumn函数。
(7)string ora_getcolumn(integer cursor, integer column)
返回当前的值。列由零开始的数字索引。
(8)boolean ora_logoff(integer connection)
断开对数据库服务器的链接。
以下是向ORACLE数据库插入数据的示例程序:
<html>
<head><title>向ORACLE数据库中插入数据</title></head>
<body>
<form action="<?echo $PHP_SELF;?>" method="post">
<table border="1" cellspacing="0" cellpadding="0">
<tr>
<th>ID</th>
<th>name</th>
<th>Description</th>
</tr>
<tr>
<td><input type="text" name="name" maxlength="50" size="10"></td>
<td><input type="text" name="email" maxlength="255" size="30"></td>
<td><input type="text" name="Description" maxlength="255" size="50"></td>
</tr>
<tr align="center">
<td colspan="3"><input type="submit" value="提交"><input type="reset" value="重写"></td>
</tr>
</table>
</form>
<?
//先设置两个环境变量ORACLE_HOME,ORACLE_SID
putenv("ORACLE_HOME=/oracle/app/oracle/proct/8.0.4");
putenv("ORACLE_SID=ora8");
//设置网页显示中文
putenv("NLS_LANG=Simplified_Chinese.zhs16cgb231280");
if($connection=ora_logon("scott","tiger")) {
//库表test有ID,name,Description三项
$sql = 'insert into test(ID,name,Description) values ';
$sql .= '('' . $ID . '','' . $name . '',''. $Description . '')';
if($cursor=ora_do($connect,$sql)) {
print("insert finished!");
}
$query = 'select * from test';
if($cursor=ora_do($connect,$query)) {
ora_fetch($cursor);
$content0=ora_getcolumn($cursor,0);
$content1=ora_getcolumn($cursor,1);
$content2=ora_getcolumn($cursor,2);
print("$content0");
print("$content1");
print("$content2");
ora_close($cursor);
}
ora_logoff($connection);
}
?>
</body>
</html>
通过PHP你可以轻松的连接到数据库,请求数据并将其显示在你的web站点中,甚至修改数据库中的数据。 MySQL是一种很流行的数据库,并且在互联网中有许多有关PHP与MySQL的教程。MySQL是免费的,这一点也许就吸引了不少人。由于其广泛应用, 我就不想在这里赘述MySQL的使用方法了。Oracle被大量在企业应用中采用,因此我们就利用Oracle来介绍PHP与数据库的连接。我们当然不会 提及Oracle数据库的设计原理,原因是这已经超出了我们的讨论范围。
PHP提供了两套函数与Oracle连接,分别是ORA_和OCI函数。其中ORA_函数略显陈旧。OCI函数更新据说更好一些。两者的使用语法几乎相差无几。如前所述,你的PHP安装选项应该可以支持两者的使用。
想获得更多有关在Microsoft Windows平台上安装支持PHP3的Apache服务器的知识以及更多有关Oracle数据库的知识,请查阅以下URL:。
4.1 连接
if ($conn=Ora_Logon("user@TNSNAME","password"))
{
echo "SUCCESS ! Connected to database\n";
}
else
{
echo "Failed :-( Could not connect to database\n";
}
Ora_Logoff($conn);
phpinfo();
?>
以上代码使用TNSNAME(在你的tnsnames.ora文件中指明)定义的Oracle数据库名称、用户名称和密码连接数据库。在成功连接的基础上,ora_logon函数返回一个非零的连接ID并储存在变量$conn中。
4.2 查询
假设与数据库已经连接就绪,下面我们就来实际的应用对数据库的查询。下面的代码演示了一个连接并查询的典型例子:
/*
* 连接数据库并执行查询
*/
function printoraerr($in_cur)
{
// 检查Oracle是否出错
// 如果存在错误则显示
// 当指针被激活时每次请求Oracle后调用该函数
if(ora_errorcode($in_cur))
echo "Oracle code - ".ora_error($in_cur)."\n";
return;
}
/** 主程序 */
if (!($conn=ora_logon("user@TNSNAME","password")))
{
echo "Connection to database failed\n";
exit;
}
echo "Connected as connection - $conn
\n";
echo "Opening cursor ...
\n";
$cursor=ora_open($conn); printoraerr($cursor);
echo "Opened cursor - $cursor
\n";
$qry="select user,sysdate from al";
echo "Parsing the query $qry ...
\n";
ora_parse($cursor,$qry,0); printoraerr($cursor);
echo "Query parsed
\n";
echo "Executing cursor ...
\n";
ora_exec($cursor); printoraerr($cursor);
echo "Executed cursor
\n";
echo "Fetching cursor ...
\n";
while(ora_fetch($cursor))
{
$user=ora_getcolumn($cursor,0); printoraerr($cursor);
$sysdate=ora_getcolumn($cursor,1); printoraerr($cursor);
echo " row = $user, $sysdate
\n";
}
echo "Fetched all records
\n";
echo "Closing cursor ...
\n";
ora_close($cursor);
echo "Closed cursor
\n";
echo "Logging off from oracle...
\n";
ora_logoff($conn);
echo "Logged off from oracle
\n";
?>
(译者注:以上代码段缺少注释,请读者参考PHP Manual的Oracle数据库函数部分)
4.3 显示结果
以下代码演示了怎样查询数据库并将结果输出:
function printoraerr($in_cur, $conn)
{
// 检查Oracle是否出错
// 如果存在错误则显示
// 当指针被激活时每次请求Oracle后调用该函数
// If it encountered an error, we exit immediately
if(ora_errorcode($in_cur))
{
echo "Oracle code - ".ora_error($in_cur)."
n";
ora_logoff($conn);
exit;
}
return;
}
function exequery($w_qry,$conn)
{
$cursor=ora_open($conn); printoraerr($cursor,$conn);
ora_parse($cursor,$w_qry,0); printoraerr($cursor,$conn);
ora_exec($cursor); printoraerr($cursor,$conn);
$numrows=0;
$w_numcols=ora_numcols($cursor);
// 显示头部
echo "
\n";
for ($i=0;$i<$w_numcols;$i++)
{
$align=(ora_columntype($cursor,$i)=="NUMBER")?"RIGHT":"LEFT";
echo "\t ".ora_columnname($cursor,$i)." \n";
}
echo "
\n";
while(ora_fetch($cursor))
{
echo " \n";
for ($i=0;$i<$w_numcols;$i++)
{
$align=(ora_columntype($cursor,$i)=="NUMBER")?"RIGHT":"LEFT";
if(ora_columntype($cursor,$i)=="LONG")
echo " ".
ora_getcolumn($cursor,$i)."
\n";
else
echo " ".ora_getcolumn($cursor,$i)." \n";
printoraerr($cursor,$conn);
}
$numrows++;
echo "
\n";
}
if ($numrows==0)
echo " Query returned no records
\n";
else
{
echo " \n";
echo " Count \n";
echo " $numrows \n";
echo "
\n";
}
echo " \n";
ora_close($cursor);
return;
}
// 主程序
if(!($conn=ora_logon("user@SID","password")))
{
echo "Error: Cannot connect to database\n";
exit;
}
$qry="SELECT
deptno \"Dept\"
,empno \"Emp\"
,empnm \"Name\"
,salary \"Salary\"
FROM
employee
ORDER BY 1,2";
exequery($qry);
ora_logoff($conn);
?>
(译者注:以上代码段缺少注释,请读者参考PHP Manual的Oracle数据库函数部分)
4.4 基于HTTP的Oracle登录
将以下代码加在PHP页面代码之前以确认Oracle登录。注意你必须正确设定$ SID。
if(!isset($PHP_AUTH_USER))
{
Header("WWW-authenticate: basic realm=\"$SID\"");
Header("HTTP/1.0 401 Unauthorized");
$title="Login Instructions";
echo "
You are not authorized to enter the site
\n";
exit;
}
else
{
if (!($conn=ora_logon("$PHP_AUTH_USER@$SID",$PHP_AUTH_PW)))
{
Header("WWW-authenticate: basic realm=\"$SID\"");
Header("HTTP/1.0 401 Unauthorized");
$title="Login Instructions";
echo "
You are not authorised to enter the site
\n";
exit;
}
}
?>
㈤ 用PHP操纵Oracle的LOB类型的数据
《PHP+Oracle(OCI) 初步》中讲了如何用PHP中的OCI函数来连接Oracle数据库 执行一些SQL查询及关闭数据库连接 本文将讲述另一个难度稍大的问题 用PHP的OCI函数来操纵Oracle的LOB字段 阅读本文需要《PHP+Oracle(OCI) 初步》一文中的知识用过Oracle的人都知道 Oracle有一种数据类型叫VARCHAR 用来表示不定长的字符串 VARCHAR 也是Oracle公司推荐使用的类型 但使用VARCHAR 有个问题 最大只能表示 个字符 也就相当于 个汉字 如果你的程序中某个字符的值要大于 个汉字 用VARCHAR 就不能满足要求了 这时候 你有两个选择 一是用多个VARCHAR 来表示 二是用LOB字段 这里我们来看看第二个办法
先来大体了解一下Oracle的LOB字段 Oracle的LOB类型分为三种 BLOB CLOB和BFILE CLOB称为字符LOB BLOB和BFILE是用来存储二进制数据的 CLOB和BLOB的最大长度是 GB 它们把值存放在Oracle数据库中 BFILE和BLOB类似 但它把数据放在外部的文件中 所以它又称为外部BLOB(External BLOB) 我想 我们对MYSQL应该都不会陌生 MYSQL中也有类似的数据类型 如TEXT和BLOB 在PHP的MYSQL函数中 对TEXT/BLOB的操作是直接的 就象其它类型的数据一样 但在Oracle中 情况就不一样了 Oracle把LOB当作一种特殊的数据类型来处理 在操作上不能用常规的方法 比如 不能在INSERT语句中直接把值插入到LOB字段中 也不能用LIKE进行查找
下面就通过几个例子来说明如何用PHP的OCI函数来插入 取出和查询LOB数据
一 插入
不能直接用INSERT语句向LOB字段中插入值 一般情况下 有如下的几步 .先分析一个INSERT语句 返回一个LOB的描述符 .用OCI函数生成一个本地的LOB对象 .将LOB对象绑定到LOB描述符上 .执行INSERT语句 .给LOB对象赋值 .释放LOB对象和SQL语句句柄
下面的这个例子是把用户上传的图片文件存放到BLOB(或BFILE中 操作稍蠢物有不同)中 首先要建一个表 结构如下 CREATE TABLE PICTURES ( ID NUMBER DESCRIPTION VARCHAR ( ) MIME VARCHAR ( ) PICTURE BLOB ); 如果要实现ID的自动增加 再建一个SEQUENCE: CREATE SEQUENCE PIC_SEQ;
然后是用来处理数据的PHP程带判液序代码 <?php //建立Oracle数据库连接 $conn = OCILogon($user $password $SID); //提交SQL语句给Oracle //在这里要注意的两点 一是用EMPTY_BLOB()函数 这是Oracle的内部函数 返回一个LOB的定位符 在插入LOB时 只能用这个办法先生成一个空的LOB定位符 然后对这个定位符进行操作 EMPTY_BLOB()函数是针对BLOB类型的 对应于CLOB的是EMPTY_CLOB() 二是RETURNING后面的部分 把picture返回 让PHP的OCI函数能够处理 $stmt = OCIParse($conn INSERT INTO PICTURES (id description picture) VALUES (pic_seq NEXTVAL $description $lob_upload_type EMPTY_BLOB()) RETURNING picture INTO :PICTURE ); //生成一个本地LOB对象的描述符 注意函数的第二个冲滚参数 OCI_D_LOB 表示生成一个LOB对象 其它可能的还有OCI_D_FILE和OCI_D_ROWID 分别对应于BFILE和ROWID对象 $lob = OCINewDescriptor($conn OCI_D_LOB); //将生成的LOB对象绑定到前面SQL语句返回的定位符上 OCIBindByName($stmt :PICTURE &$lob OCI_B_BLOB); OCIExecute($stmt); //向LOB对象中存入数据 因为这里的源数据是一个文件 所以直接用LOB对象的savefile()方法 LOB对象的其它方法还有 save()和load() 分别用来保存和取出数据 但BFILE类型只有一个方法就是save() if($lob >savefile($lob_upload)){ OCICommit($conn); echo 上传成功<br> ; }else{ echo 上传失败<br> ; } //释放LOB对象 OCIFreeDesc($lob); OCIFreeStatement($stmt); OCILogoff($conn);
?>
还有一个要注意的地方 LOB字段的值最少要 个字符 所以在save()或savefile()之前 要确保值不能为空 否则 Oracle会出错
二 取出
对一个LOB中取出数据 有两种办法 一是生成一个LOB对象 然后绑定到一条SELECT语句返回的定位符上 再用LOB对象的load()方法取出数据 二是直接用PHP的OCIFetch***函数 第一种方法比第二种方法要麻烦得多 所以我直接说说第二种方法 还是用上面的表
<?php $conn = OCILogon($user $password $SID); $stmt = OCIParse($conn SELECT * FROM PICTURES WHERE ID=$pictureid ); OCIExecute($stmt); //秘密就在PCIFetchInfo的第三个参数上 OCI_RETURN_LOBS 第三个参数是FETCH的模式 如果OCI_RETURN_LOBS 就直接把LOB的值放到结果数组中 而不是LOB定位符 也就不用LOB对象的load()方法了 if (OCIFetchInto($stmt $result OCI_ASSOC+OCI_RETURN_LOBS)) { echo Content type: StripSlashes($result[MIME]); echo StripSlashes($result[PICTURE]); } OCIFreeStatement($stmt); OCILogoff($conn); ?>
这个程序用来显示放在LOB中的数据(图片) 调用方法(假设脚本名是getpicture php) <IMG SRC= getpicture php?pictureid= ALT= 放在Oracle LOB中的图片 >
三 查询
前面已经提了下 对于Oracle的LOB字段是不能用LIKE进行匹配的 怎么办呢?其实并不复杂 Oracle有一个匿名的程序包 叫DBMS_LOB 里面有所有的操作LOB所需的过程
假设有象这样一个表: CREATE TABLE ARTICLES ( ID NUMBER TITLE VARCHAR ( ) CONTENT CLOB );
文章的内容放在CONTENT字段中
现在我们要找出所以内容中包含 PHP中文用户 的文章 可以这么来做
<?php $conn = OCILogon($user $password $SID); //WHERE子句中用了DBMS_LOB INSTR过程 它有四个参数 前面两个分别表示LOB的定位符(可以直接用字段表示)和要查找的字符串 后面两个分别表示开始的偏移量和出现的次数 要注意的是必须判断它的返回值 也就是要大于 $stmt = OCIParse($conn SELECT * FROM ARTICLES WHERE DBMS_LOB INSTR(CONTENT PHP中文用户 ) > ); OCIExecute($stmt); if (OCIFetchInto($stmt $result OCI_ASSOC+OCI_RETURN_LOBS)) { } OCIFreeStatement($stmt); OCILogoff($conn); ?>
Oracle还提供了许多用来操作LOB数据的过程 如LENGTH SUBSTR等等 至于它们的详细用法 可以考虑Oracle的开发手册
lishixin/Article/program/PHP/201311/21377
㈥ php,pdo怎么连接oracle数据库
php有强大的功能不但可以支持mysql,mssql,mysqli之个我们还可以与oracle数据连接,要让php支持oracle非常的简单我们只要把php.ini中的;extention = php_oci8.dll分号去掉即可.
请先安装oracle的客户端,能够用客户端访问oracle。
php支持oracle连接函数
php.ini文件中的配置,去掉 ;extention = php_oci8.dll,去掉前面的分号,重启apache就可以了,如果不行,我们再把php目录中的php_oci8.dll拷到windows系统的system32下面去吧.
oracle数据库建立链接,代码如下:
$conn=oci_connect('username','password',"(DEscriptION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.100)(PORT=1521))(CONNECT_DATA=(SID=test)))");
㈦ PHP怎么连接并操作远程ORACLE数据库
putenv ("ORACLE_BASE=/ora");
putenv ("ORACLE_HOME=/ora");
putenv("NLS_LANG=AMERICAN");
//$conn = Ora_PLogon("hostname","passwd");
$conn = Ora_PLogon("web@web","web");
@ora_commiton($conn);
$cur=ora_open($conn);
$err_no=0;
$query = "select PASSWORD from register where mobilno='$t_tele_num'";
$result=ora_parse($cur,$query);
$result=ora_exec($cur);
if(ora_fetch($cur))
$datacount = ora_getcolumn($cur, 0);
echo "$datecount";
ora_close($cur);
㈧ php可以支持目前主流的数据库
php支持的数据库有很多噢,下面列举一下!
MySQL
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。
MsSql
ms SQL是指微软的SQLServer数据库服务器,它是一个数据库平台,提供数据库的从服务器到终端的完整的解决方案,其中数据库服务器部分,是一个数据库管理系统,用于建立、使用和维护数据库。
Oracle
oracle是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。
Access
Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点,是 Microsoft Office 的系统程序之一。
PostgreSQL
PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为基础的对象关系型数据库管理系统。POSTGRES的许多领先概念只是在比较迟的时候才出现在商业网站数据库中。
InterBase
InterBase是一种关系数据管理系统(Relational database management system RDBMS),它提供了在单机或多用户环境中的快速数据处理及共享的工具。InterBase的核心是提供透明的多机种支持的网络运行服务器技术。InterBase是可以在Windows 95、Windows NT、Novell NetWare及多种UNIX操作系统上运行的工具。
CUBRID
CUBRID是一个全面开源,且完全免费的关系数据库管理系统。
dBase
dBase是第一个在个人电脑上被广泛使用的单机版数据库系统。
Firebird/InterBase
Firebird特性介绍firebird是一个全功能的,强大高效的,轻量级,免维护的数据库。
IBM DB2
IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统
Informix
Informix是IBM公司出品的关系数据库管理系统(RDBMS)家族。
MaxDB
MaxDB是一种企业级数据库管理系统。
MongoDB
MongoDB 是一个基于分布式文件存储的数据库。
mSQL
mSQL(mini SQL)是一个单用户数据库管理系统,个人使用免费,商业使用收费。由于它的短小精悍,使其开发的应用系统特别受到互联网用户青睐。
SQLite
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。
SQLSRV
SQL Server(SQLSRV )是由Microsoft开发和推广的关系数据库管理系统(RDBMS)。
Sybase
美国Sybase公司研制的一种关系型数据库系统,是一种典型的UNIX或WindowsNT平台上客户机/服务器环境下的大型数据库系统。
tokyo_tyrant
一个可持久化数据的,好处是速度不错,而且大至兼容Memcached的文本协议,客户端可以继续使用SpyMemcached。
希望对你有帮助,谢谢采纳!