初学PHP——使用OCI连接Oracle

时间:2024-04-13 07:37:26

1、让PHP支持OCI,只需如下几步:

首先,安装PHP的集成运行环境,或者理解为服务器吧,我安装的是名叫WampServer的,安装好后,从安装目录中找到php.ini文件,比如我本地的路径是D:\wamp\bin\php\php5.3.3,将php.ini中的php_oci8.dll的;去掉,也就是把注释去掉,相当于可以使用php_oci8了。

2、然后wampserver运行后,将php>php extentions中将php_oci8打上勾。

初学PHP——使用OCI连接Oracle

 

初学PHP——使用OCI连接Oracle

 

 

2、安装的有Oracle客户端,并且在Oracle安装配置文件,tnsnames.ora文件,此文件路径是安装oracle的路径,比如我本机的是

F:\oracle\product\10.2.0\client_1\NETWORK\ADMIN  ,所连的200数据库,其中的配置详情如下:

200 =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.200)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVICE_NAME = tongcard)

    )

  )

 

 

 

 

以下是使用PHP的OCI得到db的方法,与上面的tnsnames.ora文件非常类似:

 

$db = " (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = $host)(PORT = $port)) (CONNECT_DATA = (SID=$sid) (SERVER = DEDICATED) (SERVICE_NAME = $sname) ) )";


 

 

比照以上的两片代码可以发现:

CONNECT_DATA = (SERVICE_NAME = tongcard)

CONNECT_DATA = (SID=$sid)

service_name名为tongcard, sid就是service_name的值。

 

 

 下面是一个例子,验证是否连接数据库成功,因为想以最快速度验证使用PHP的OCI连接数据库成功,所以没有写HTML页面,直接模拟了一个登录,将所需要的参数以变量形式传入。

<?php /* * To change this template, choose Tools | Templates * and open the template in the editor. */ //以下是变量(数据库连接的配置) $host = "192.168.1.200"; $port = "1521"; $sid = "tongcard"; $sname = "tongcard"; $db_user = "tmp2120723"; $db_pwd = "ceshi"; //以下是模拟登录,输入的参数为用户名和密码。此处为了简便没有写HTML页面, //将user_pass作为输入的值传入,为了验证连接数据库是否成功。 $userName ='admin'; $user_pass ='123456'; $user_id = '01040010001.admin'; if (!($conn = connect_oracle2($host, $port, $sid, $sname, $db_user, $db_pwd))) {//是否得到数据库链接 echo "connot connect the Oracle database"; exit; } $qry = "select * from tmp2120723.admin_users t where t.user_id=:userId and t.login_name = :loginName"; $sql = oci_parse($conn, $qry);//查询转换 oci_bind_by_name($sql, ":loginName", $userName, 32);//查询语句$sql,条件所需要的参数loginName,值为$userName,长度为32.长度可以不写 oci_bind_by_name($sql, ":userId",$user_id );//$sql查询语句,所需要的参数userId,值 为$user_id变量的值, echo "<br/>"; oci_execute($sql);//执行sql $row = array();//查询都是返回array() while ($result = oci_fetch_array($sql, OCI_ASSOC)) {//使用oci_fetch_array函数遍历 $row[] = $result;//转成数组的结果集 foreach ($result as $key => $value) { if ($key == 'LOGIN_PASSWD') { if (md5($user_pass) == $value) {//密码MD5后的值=从数据库表中查询出来的value echo "login success<br/>"; } else { echo "login failed <br/>"; } } } } //连接数据库方法 function connect_oracle2($host, $port, $sid, $sname, $db_user, $db_pwd){ $db = " (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = $host)(PORT = $port)) (CONNECT_DATA = (SID=$sid) (SERVER = DEDICATED) (SERVICE_NAME = $sname) ) )"; $dbconn = ocilogon($db_user, $db_pwd, $db); return $dbconn; } ?>


 

运行该文件,我是将此文件放入到wamp的D:\wamp\www\里面,其实这只是一个文件,并不是一个项目,最初为了验证如果不将此文件直接放在wamp的www,而是放在一个文件夹里,该如何访问,因此增加了一个testing的文件夹,将此文件放入到testing目录下,我的文件名叫TestOne.php

准备进绪,开始访问:

http://localhost/testing/TestOne.php

这里值得一提的是,PHP的访问,在默认为8080端口时,不需要在localhost后面加:8080,假如没有testing文件夹,则直接是http://localhost/TestOne.php

 

访问结果:

初学PHP——使用OCI连接Oracle