«
如何在PHP中使用Oracle数据库

时间:2008-5-31    作者:Deri    分类: 分享


   <p>  在php3.0以上版本中,php内置了几乎目前所有的数据库处理函数,包括Oracle;在本文中我们通过一个实例来介绍了如何使用这些函数来操作Oracle数据库。</p><p>  PHP提供了2大类API(应用程序接口)来操作Oracle数据库。一个是标准的Oracle处理函数(ORA) 另一个是Oracle 8调用接口函数(OCI8). 后者只能在Oracle 7或8版本上使用。 由于OCI8 提供了很多优化选项,因此只要有可能就应该采用 OCI8 接口。这里我们分别用这二种函数集进行了演示。</p><p>  首先本文的前提假设你已经装好了 <a href="http://www.oracle.com/" target="_blank">Oracle</a>数据库环境 和 PHP 开发环境. 如果不懂也没多大关系,网上有很多相关的好文章可以参考。</p><p>  第一步:创建 一个实验用的数据库</p><p>  这个问题你可以请你的数据库管理员或参考Oracle用户手册处理,这里不再多讲</p><p>  用 ORA 建立数据表</p><p>  即使你已经创建好了数据表,也请看看本段文字。它可以告诉你如何用PHP+SQL的技术操作Oracle</p><p>  在本例中我们创建了一个用于存放个人email的数据表</p><p>  相关PHP代码:</p><code>PutEnv("ORACLE_SID=ORASID");<br />$connection = Ora_Logon ("username", "password");<br />if ($connection == false){<br /> echo Ora_ErrorCode($connection).": ".Ora_Error($connection)."<br />";<br /> exit;<br />}  <br />$cursor = Ora_Open ($connection);<br />if ($cursor == false){<br /> echo Ora_ErrorCode($connection).": ".Ora_Error($connection)."<br />";<br /> exit;<br />}  <br />$query = "create table email_info " .<br />   "(fullname varchar(255), email_address varchar(255))";<br />$result = Ora_Parse ($cursor, $query);<br />if ($result == false){<br /> echo Ora_ErrorCode($cursor).": ".Ora_Error($cursor)."<br />";<br /> exit;<br />}<br />$result = Ora_Exec ($cursor);<br />if ($result == false){<br /> echo Ora_ErrorCode($cursor).": ".Ora_Error($cursor)."<br />";<br /> exit;<br />}<br />Ora_Commit ($connection);<br />Ora_Close ($cursor);<br />Ora_Logoff ($connection);<br />?></code><p>  为了处理Oracle数据库,我们首先要和Oracle建立一个联结。</p>
<p> </p>

   <p>  语法是 Ora_Logon (user, password),返回一个connectID.. </p><p>  提醒: 在此之前我们还必须设置环境变量: ORACLE_SID的值.</p><p>  现在,我们可以通过该联结的 ID对Oracle进行交互式操作了。数据表名字就叫email_info吧。该表由2个域组成,一个存储个人全名,(如:晓月)一个存储email地址如(xiaoyue@163.net)</p><p>  还需要一个游标 Ora_Open. 该游标常常用来枚举数据。我们用 Ora_Parse 或 Ora_Exec 查询Oracle的结果集. Ora_Parse 效验SQL语法正确性 而 Ora_Exec 则执行相应的SQL语句. 如果这一切都正常运行,那么我们就运行 Ora_Commit来确认.</p><p>  Create A Table Using OCI</p><p>  下面我们将建立一个email个人信息簿。这次采用OCI8 API指令</p><p>  相关PHP代码:</p><code>PutEnv("ORACLE_SID=ORASID");<br />$connection = OCILOGOn ("username", "password");<br />if ($connection == false){<br />  echo OCIError($connection)."<br />";<br />  exit;<br />}  <br />$query = "create table email_info " .<br />       "(fullname varchar(255), email_address varchar(255))";<br />$cursor = OCIParse ($connection, $query);<br />if ($cursor == false){<br />  echo OCIError($cursor)."<br />";<br />  exit;<br />}<br />$result = OCIExecute ($cursor);<br />if ($result == false){<br />  echo OCIError($cursor)."<br />";<br />  exit;<br />}<br />OCICommit ($connection);<br />OCILOGOff ($connection);<br />?></code><p>  我们可以看到这2段代码语法几乎都一样,区别仅仅函数名字不同; 其次,在OCI8中我们不需要专门运行打开游标的指令,在调用 OCIParse 系统就自动返回了一个游标ID.</p>
 <p> </p>

   <p>  利用 ORA 向数据表 'email_info' 输入数据</p><p>  当用户浏览这段脚本时,显示一个由姓名、email输入域组成的表单;当用户添好数据点击提交时,脚本程序将把这姓名、email保存到'email_info'数据表中。</p><p>  相关PHP代码:</p><code>if ($submit == "click"){<br /> // The submit button was clicked!<br /> // Get the input for fullname and email then store it in the database.<br /> PutEnv("ORACLE_SID=ORASID");<br /> $connection = Ora_LOGOn ("username","password");<br /> if ($connection == false){<br />  echo Ora_ErrorCode($connection).": ".Ora_Error($connection)."<br />";<br />  exit;<br /> }<br />$cursor = Ora_Open ($connection);<br />if ($cursor == false){<br /> echo Ora_ErrorCode($connection).": ".Ora_Error($connection)."<br />";<br /> exit;<br />}  <br /> $query = "insert into email_info values ('$fullname', '$email')";<br /> $result = Ora_Parse ($cursor, $query);<br /> if ($result == false){<br />  echo Ora_ErrorCode($cursor).": ".Ora_Error($cursor)."<br />";<br />  exit;<br /> }<br /> $result = Ora_Exec ($cursor);<br /> if ($result == false){<br />  echo Ora_ErrorCode($cursor).": ".Ora_Error($cursor)."<br />";<br />  exit;<br /> }<br /> Ora_Commit ($connection);<br /> Ora_Close ($cursor);<br /> Ora_LOGOff ($connection);<br />}<br />else{<br /> echo '<br />  <br />   <FORM action=insert.PHP method=post><br />  请输入姓名<br />  <INPUT name=fullname></INPUT><br />  请输入Email地址<br />  <INPUT name=email></INPUT><br />  <INPUT name=submit type=submit value=click></INPUT>     <br />  </FORM><br />  <br /> ';<br />}<br />?></code><p>  对了,这段脚本必须存为insert.PHP,因为在调用的页面中指定insert.PHP为表单处理程序</p>
 <p> </p>

   <p>  浏览效果:</p><p>  <img src="/content/uploadfile/200805/2008053117461856.gif" onclick="get_larger(this)" alt="如何在PHP中使用Oracle数据库" /></p><p>  <strong>利用OCI向数据表 'email_info' 输入数据</p><p>  </strong>同上,只不过用OCI来写</p><p>  相关PHP代码:</p><code>if ($submit == "click"){<br /> // The submit button was clicked!<br /> // Get the input for fullname and email then store it in the database.<br /> PutEnv("ORACLE_SID=ORASID");<br /> $connection = OCILOGOn ("username","password");<br /> if ($connection == false){<br />  echo OCIError($connection)."<br />";<br />  exit;<br /> }<br /> $query = "insert into email_info values ('$fullname', '$email')";<br /> $cursor = OCIParse ($connection, $query);<br /> if ($cursor == false){<br />  echo OCIError($cursor)."<br />";<br />  exit;<br /> }<br /> $result = OCIExecute ($cursor);<br /> if ($result == false){<br />  echo OCIError($cursor)."<br />";<br />  exit;<br /> }<br /> OCICommit ($connection);<br /> OCILOGOff ($connection);<br />}<br />else{<br /> echo '<br />  <br />   <FORM action=insert.PHP method=post><br />  请输入姓名<br />  <INPUT name=fullname></INPUT><br />  请输入 Email 地址<br />  <INPUT name=email></INPUT><br />  <INPUT name=submit type=submit value=click></INPUT>     <br />  </FORM><br />  <br /> ';<br />}<br />?></code><p>  对了,这段脚本必须存为insert.PHP,因为在调用的页面中指定insert.PHP为表单处理程序</p>
 <p> </p>

   <p>  浏览效果:</p><p>  <img src="/content/uploadfile/200805/2008053117461968.gif" onclick="get_larger(this)" alt="如何在PHP中使用Oracle数据库" /></p><p>  <strong>利用ORA列出全部数据表'email_info'中的数据</p><p>  </strong>下面,我们将逐条读出数据库的内容,并以html表格形式显示'email_info'数据表中的数据</p><p>  相关PHP代码:</p><code>PutEnv("ORACLE_SID=ORASID");<br />$connection = Ora_Logon ("username","password");<br />if ($connection == false){<br /> echo Ora_ErrorCode($connection).": ".Ora_Error($connection)."<br />";<br /> exit;<br />}<br />$cursor = Ora_Open ($connection);<br />if ($cursor == false){<br /> echo Ora_ErrorCode($connection).": ".Ora_Error($connection)."<br />";<br /> exit;<br />}  <br />$query = "select * from email_info";<br />$result = Ora_Parse ($cursor, $query);<br />if ($result == false){<br /> echo Ora_ErrorCode($cursor).": ".Ora_Error($cursor)."<br />";<br /> exit;<br />}<br />$result = Ora_Exec ($cursor);<br />if ($result == false){<br /> echo Ora_ErrorCode($cursor).": ".Ora_Error($cursor)."<br />";<br /> exit;<br />}<br />echo '<table cellspacing="0" cellpadding="0"><br />    <tr><br />     <td><strong>Full Name</strong></td><br />     <td><strong>Email Address</strong></td><br />    </tr><br />    &quot;;<br /><br />    <br /><br />    while (Ora_Fetch_Into ($cursor,  &amp;$values)){<br /><br />     <br />    $name = $values[0];<br /><br />     <br />    $email = $values[1];<br /><br />    <br /><br />     <br />    echo  &quot;<br />    <tr><br />     <td>$name</td><br />     <td>$email</td><br />    </tr><br />   </table>';<br />Ora_Close ($cursor);<br />Ora_Logoff ($connection);<br />?></code></p>
 <p> </p>

   <p>  程序运行的浏览效果如下所示:</p><p>  <img src="/content/uploadfile/200805/2008053117462198.gif" onclick="get_larger(this)" alt="如何在PHP中使用Oracle数据库" /></p><p>  <strong>利用OCI列出全部数据表'email_info'中的数据</p><p>  </strong>同上,只不过用OCI来写</p><p>  相关PHP代码:</p><code>PutEnv("ORACLE_SID=ORASID");<br />$connection = OCILogon ("username","password");<br />if ($connection == false){<br /> echo OCIError($connection)."<br />";<br /> exit;<br />}<br />$query = "select * from email_info";<br />$cursor = OCIParse ($connection, $query);<br />if ($cursor == false){<br /> echo OCIError($cursor)."<br />";<br /> exit;<br />}<br />$result = OCIExecute ($cursor);<br />if ($result == false){<br /> echo OCIError($cursor)."<br />";<br /> exit;<br />}<br />echo '<table cellspacing="0" cellpadding="0"><br />    <tr><br />     <td><strong>Full Name</strong></td><br />     <td><strong>Email Address</strong></td><br />    </tr><br />    &quot;;<br /><br />    <br /><br />    while (OCIFetchInto ($cursor,  $values)){<br /><br />     <br />    $name = $values[0];<br /><br />     <br />    $email = $values[1];<br /><br />    <br /><br />     <br />    echo &quot;<br />    <tr><br />     <td>$name</td><br />     <td>$email</td><br />    </tr><br />   </table>';<br />OCILogoff ($connection);<br />?></code></p></p><p>  程序运行的浏览效果如下所示:</p><p>  <img src="/content/uploadfile/200805/2008053117462295.gif" onclick="get_larger(this)" alt="如何在PHP中使用Oracle数据库" /></p></p>