经验分享:php连接oracle及thinkphp 3.2.2连接oracle

这里讲的是通过php提供的一个oci_connect方法来连接oracle

如:$conn = oci_connect('用户名', '口令', '服务名')

注意,这里的服务名是指tnsnames.ora文件里面的服务名,并不是数据库域名(db_domain)、服务名(service_name)、或操作系统环境变量(ORACLE_SID)


php要连接oracle,必须使php的OCI8 Support 为enabled!

测试方法:在你的PHP运行环境里写入一个文件含phpinfo()的php网页,运行后在页面上查找OCI8,如果能找到如下图所示的内容,则说明你的PHP能够正常连接Oracle的数据库了!

经验分享:php连接oracle及thinkphp 3.2.2连接oracle_第1张图片

如果你的php没有OCI8 Support,请先

1、把php.ini中的extension=php_oci8.dll开启,前面的注释分号去掉。

2、选择与你的系统环境位数(32或64位)的Instant Client,解压到一个目录(例如:E:\app\instantclient_11_2),然后在添加以下环境变量:
TNS_ADMIN=E:\app\TNS(你的tnsnames.ora目录)
NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK(字符集设置)
然后在系统Path变量最前面添加值E:\app\instantclient_11_2;(注意分号不要漏了!这是你的Instant Client的目录!)

设置完成后最好重启下电脑!


假如我的tnsnames.ora为:

PHP =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.138.1)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = myorcl)
    )
  )

那么,这里的服务为PHP,如果用scott用户来连接的话,则为

$conn = $conn = oci_connect('scott', 'tiger', 'PHP')

if($conn){

echo 'ok!';

}else{

echo 'no!';

}

?>

一般到这就可以用PHP连接Oracle了,如果要用ThinPHP连接Oracle,则只需要在你的项目目录下的config文件里面添加一些配置即可,如:

  1. 'DB_TYPE'            => 'oracle'// 数据库类型   
  2. 'DB_NAME'            => 'PHP'// 服务名
  3. 'DB_USER'            => 'scott'// 用户名  
  4. 'DB_PWD'             => 'tiger'// 密码  
  5. 'DB_PREFIX'          => ' '// 数据库表前缀  
然后在控制器里面写

$db = M('dept');
$result = $db->select();
dump($result);

就可以看到查询结果了!

array (size=4)
  0 => 
    array (size=4)
      'DEPTNO' =>  '10' (length=2)
      'DNAME' =>  'ACCOUNTING' (length=10)
      'LOC' =>  'NEW YORK' (length=8)
      'NUMROW' =>  '1' (length=1)
  1 => 
    array (size=4)
      'DEPTNO' =>  '20' (length=2)
      'DNAME' =>  'RESEARCH' (length=8)
      'LOC' =>  'DALLAS' (length=6)
      'NUMROW' =>  '2' (length=1)
  2 => 
    array (size=4)
      'DEPTNO' =>  '30' (length=2)
      'DNAME' =>  'SALES' (length=5)
      'LOC' =>  'CHICAGO' (length=7)
      'NUMROW' =>  '3' (length=1)
  3 => 
    array (size=4)
      'DEPTNO' =>  '40' (length=2)
      'DNAME' =>  'OPERATIONS' (length=10)
      'LOC' =>  'BOSTON' (length=6)
      'NUMROW' =>  '4' (length=1)

如果出现没有监听等报错的话,请先检查数据库的配置信息(主要是ip)有没有错,然后检查下网络是否通。都没问题的话可以留言,我看到的话会第一时间回复……

你可能感兴趣的:(Oracle,DBA成长之路)