平台:Sybase IQ/15.4.0 Linux 5.5 - x86_64 PHP5.5.3
(把平台列出来是很有必要的)
目前网上关于PHP连接Sybase 数据库的资料很少,可能也是有些人不愿发文共享吧。这里我把自己的一些开发
经验与大家共享。希望对大家有所帮助。
首先要编译安装PHP支持Sybase,详细见我的博客http://blog.csdn.net/ajinnv/article/details/11598569
为了以后软件更换数据库方便,这里使用adodb5.0作为php连接sybase数据库的工具。
关于adodb5.0介绍(从网上摘录):
虽然 PHP 是建构 Web 系统强有力的工具,但是 PHP 存取数据库的功能,一直未能标准化,每一种数据库,都使用另一种不同且不兼容的应用程序接口(API)。为了填补这个缺憾,因此才有 ADODB 的出现。一旦存取数据库的接口予以标准化,就能隐藏各种数据库的差异,若欲转换至其它不同的数据库,将变得十分容易。
目前 ADODB 支持的数据库种类非常地多,例如:MySQL, PostgreSQL, Interbase, Informix, Oracle, MS SQL 7, Foxpro, Access, ADO, Sybase, DB2 以及一般的 ODBC (其中 PostgreSQL、Informix、Sybase 的driver 是由自由软件社群发展之后贡献出来的)。
使用 ADODB 最大的优点之一是:不管后端数据库如何,存取数据库的方式都是一致的,开发设计人员不必为了某一套数据库,而必须再学习另一套不同的存取方法,这大大减轻开发人员的知识负担,过去的知识往后仍可继续使用,转移数据库平台时,程序代码也不必做太大的更动。
网上关于adodb的中文手册(有兴趣的可以看下)
http://linux.chinaitlab.com/manual/database/adodb1.99.html
首先下载adodb 然后安装,所谓的安装就是复制adodb文件夹到网站根目录就行了。下面利用adodb
<?php
// 引入 adodb
include('adodb/adodb.inc.php');
// 对象建立
$conn = &ADONewConnection('mysql');
// 要不要显示错误信息,false 不要,true 要。
// $conn->debug = false;
$conn->debug = true;
// 连接数据库
// 用法:$conn->Connect('主机', '使用者', '密码', '数据库');
//非持续性连接
$conn->Connect('localhost', 'piza', 'ooo123', 'test');
// 若欲采用持续性连接,上式可换用 PConnect:
// $conn->PConnect('localhost', 'piza', 'ooo123', 'test');
if (!$rs)
print $conn->ErrorMsg();
else print "Database Connect Succeful!";
// 设定 sql 命令$sql = "insert into t values ('abcde', 18)";
// 执行 sql 命令
$rs = $conn->Execute($sql);
// 检查执行结果,若 $rs == false,则呼叫 $conn 对象的成员函式 ErrorMsg()
?>
---------------------------------------------------------------------
上面是连接MySQL的示例,但是没有Sybase的。于是大家就模仿上面的连接代码
<?php
include_once("../adodb5/adodb.inc.php");
$db = NewADOConnection('sybase');
$db->Connect("localhost", "user01","password123","DBname01") or die("Failed to connect to database");
//$db->Execute("set names 'GBK'");
?>
或者:
<?php
include_once("../adodb5/adodb.inc.php");
$db = NewADOConnection('sybase');
$db->Connect("192.168.1.153:2640", "user01","password123","DBname01") or die("Failed to connect to database");
//$db->Execute("set names 'GBK'");
?>
但是按这样做后发现老是报错,报错信息为
-------------------------------------------------------------------------------------------------------
ct_connect(): 目录服务层: 内部目录控制层错误: 要求的服务器名没找到.
-----------------------------------------------------------------------------------------------------
网上搜索找不到答案,官方文档上也没发查。
后来查了php手册发现,MySQL的连接和Sybase的连接完全是不一样的。正确的方式应该是:
<?php
include_once("../adodb5/adodb.inc.php");
$db = NewADOConnection('sybase');
$db->Connect("DBserverName", "user01","password123","DBname01") or die("Failed to connect to database");
//$db->Execute("set names 'GBK'");
?>
也即:
$db->Connect("服务名", "用户名","密码","数据库名")
第一个参数根本不是填什么主机,IP+端口!!!
---------------------------------------------------
关于服务名可以查看interfaces 中配置
[root@JK02 ~]$ more /sybaseiq/asiq15/interfaces
wkiq0
master tcp ether 192.168.100.68 2638
query tcp ether 192.168.100.68 2638
wkiq1
master tcp ether 192.168.100.68 2640
query tcp ether 192.168.100.68 2640
wqdb1
master tcp ether 192.168.100.35 2640
query tcp ether 192.168.100.35 2640
wqdb2
master tcp ether 192.168.100.144 2640
query tcp ether 192.168.100.144 2640
DBserverName
master tcp ether 192.168.100.143 2640
query tcp ether 192.168.100.143 2640
查看数据库名:
1> select current database from dummy
2> go
current database
----------------------------------------------------------------
DBname01 这一切做好之后,就可以进行PHP与Sybase 数据库的开发了(^_^)