Debian Linux 安装 PHP, 然后要用此 PHP 去连 Oracle, 不过缺省 Orace connect 是没有编进 PHP 里面的, 但是又不想要把 PHP 重新 make, 为了要维护方便, 所以就想办法来把他编成 Modules, 在 Pecl 找到 oci8, 一切就方便多啰~
Debian 安装 PHP Pecl oci connection
安装 OCI8 步骤(安装 PHP 连 Oracle Version 10.2.0.4 的 OCI 版本)
于 Oracle Database Instant Client 下载 Client/SDK (Version 10.2.0.4 Instant Client Package - Basic 和 SDK)
apt-get install php-pear php5-dev
mkdir -p /opt/oracle
cd /opt/oracle
unzip ~/oracle-instantclient-basic-10.2.0.4-1.i386.zip # instantclient_10_2
unzip ~/oracle-instantclient-devel-10.2.0.4-1.i386.zip # instantclient_10_2/sdk/
mv instantclient_10_2 instantclient
cd /opt/oracle/instantclient
ln -s libclntsh.so.10.1 libclntsh.so
ln -s libocci.so.10.1 libocci.so
pecl install oci8
问题: Please provide the path to ORACLE_HOME dir. Use 'instantclient,/path/to/instant/client/lib' if you're compiling against Oracle Instant Client [autodetect] :
输入: shared,instantclient,/opt/oracle/instantclient
pecl 装完后, so 档会放置于: /usr/lib/php5/20060613+lfs/oci8.so, 此文件就是 php oci8 extension 啰~
vim /etc/php5/conf.d/oci8.ini # 创建 oci8.ini 文件(让 apache 加载时读取此 extension), 内容如下:
extension=oci8.so
/etc/init.d/apache2 reload
这样子就完成 PHP OCI8 的安装啰~
测试
vim oci.php
oci_connect();
?>
php oci.php # 运行
Warning: oci_connect() expects at least 2 parameters, 0 given in oci.php on line 2 # 看到这个就代表成功了~
Fatal error: Call to undefined function oci_connect() in oci.php- on line 2 # 看到这样子就是没装好或没设好.
写个简单的 Oracle Connect 的 Insert/Select 程序测试:
$dbh = oci_connect ('ACCOUNT', 'PASSWORD', '//10.0.0.1/DBNAME') or die('OCI Connect error');
$res = oci_parse($dbh, 'INSERT INTO "USERS"(ID, NAME, PASSWORD) VALUES(1, "admin", "admin_password")') or die('Insert error');
//$res = oci_parse($dbh, 'SELECT * FROM "USERS"') or die('Select user error');
oci_execute($res);
while ($row = oci_fetch_assoc($res)) {
foreach ($row as $item) {
echo $item . "\n";
}
}
?>
其它参考
其它附注
Oracle SQL Developer 设置
设置 Role 要选 default, 若选 sysdba, SQL 语法 SELECT Table 前就需要加 db name
DB insert 需要用 "单引号" 括起来(Oracle 认定的字符串需要用 单引号 选起来), 双引号是对分辨 Table name 大小写用的.