在PHP网站开发中,由于其支持各种数据库引擎,如Mysql,Mssql,Pgsql,sqlite等,并对各种数据库系统都提供了不同的函数作为接口,给PHP网站开发者带来很多便利,但同时也带来了平台移植性的问题,随着底层数据库的改变,PHP代码也必须改变。对于这个问题,有各种解决方法,如使用PHP ADODB类,PHP PEAR DB类或者自行编写PHP DB类,将各种数据库的函数操作聚合在一起等,今天和大家分享如何安装使用PHP PEAR DB类,以实现不同数据库的访问功能。
准备工作
1、在使用PHP PEAR DB类访问数据库之前,需要安装PHP PEAR,然后通过PEAR来下载安装DB类,即。
pear install db
2、根据需要安装相关数据库,比如Mysql,Mssql,Pgsql,Sqlite等,同时在PHP.INI中找到Dynamic Extensions,引入对应数据的DLL文件,并重启Apache。
注意:由于我使用的是DedeAMPZ,在安装PHP PEAR时一定要安装在DedeAMPZ/WebRoot/Default目录下,否则在引入DB.php时会报Failedopening required ‘DB.php’错误,即找不到DB类(could not find pear db library),因为DedeAMPZ可能对相关的目录做了限制。
PHP PEAR DB类使用示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | <? require_once("DB.php"); $userName = 'root'; $password = '123456'; $hostName = 'localhost'; $dbName = 'test'; $dsn = "mysql://$userName:$password@$hostName/$dbName"; $dbCon = DB::connect($dsn); if (DB::isError($dbCon)) { die ($dbCon->getMessage()); } $sql = "CREATE TABLE leapsoul (". "`id` INT( 11 ) UNSIGNED NOT NULL ,". "`name` VARCHAR( 30 ) CHARACTER SET gbk COLLATE gbk_chinese_ci NOT NULL ,". "`age` INT( 2 ) NOT NULL ,". "`birthday` VARCHAR( 30 ) CHARACTER SET gbk COLLATE gbk_chinese_ci NOT NULL ,". "`sex` INT( 1 ) NOT NULL ,". "PRIMARY KEY ( `id` )". ") ENGINE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci"; $result = $dbCon->query($sql); if (DB::isError($result)) { die ($result->getMessage()); } $sql = "insert into leapsoul(id,name,age,birthday,sex) values(1,'leapsoul',1,'2009-05-13',1),(2,'leapsoul',1,'2009-05-13',1),(3,'leapsoul',1,'2009-05-13',1)"; $result = $dbCon->query($sql); if (DB::isError($result)) { die ($result->getMessage()); } $dbCon->setFetchMode(DB_FETCHMODE_ASSOC); $sql = "select * from leapsoul"; $result = $dbCon->query($sql); if (DB::isError($result)) { die ($result->getMessage()); } for($i=0;$i<$result->numRows();$i++) { $info = &$result->fetchRow(); echo "name:".$info['name']; echo "birthday:".$info['birthday']."<br>"; } $result->free(); $dbCon->disconnect(); } |
注释:
第2行:引入PHP PEAR DB 类库
第4-7行:设定访问的数据库、登录用户名、密码、主机
第9-11行:设定DSN参数,并进行数据库链接,我连接的数据库为Mysql
知识点:从pear/DB.php的parseDSN函数中我们可以看到$dsn参数有以下几种格式
phptype://username:password@protocol+hostspec:110//usr/db_file.db?mode=0644
phptype://username:password@hostspec/database_name
phptype://username:password@hostspec
phptype://username@hostspec
phptype://hostspec/database
phptype://hostspec
phptype(dbsyntax)
phptype
其中
phptype: 代表使用的数据库,如Mysql,Mssql,Pgsql,Sqlite等
dbsyntax: Database used with regards to SQL syntax etc.(没看明白)
protocol: 使用的协议,比如TCP等
hostspec: 主机,比如数据库存放在远程服务器上,可指定端口(hostname[:port])
database: 数据库服务器上的数据库名
username: 登录的用户名
password: 登录的密码
第13-15行:错误处理,如数据库链接出错,则报错。
第17-38行:执行数据库表创建并插入测试数据。
第40行:setFetchMode函数是PHP PEAR DB让用户设定返回记录集是数字索引数组还是关联数组或者对象,此处我设定为关联数组的形式。默认DB_FETCHMODE_ORDERED模式,其他两种模式为DB_FETCHMODE_ASSOC与DB_FETCHMODE_OBJECT
第49-55行:输出记录集
第56-58行:释放记录集并关闭连接
PHP PEAR DB类部分函数说明:更多函数可参考pear/db.php和pear/db/common.php
connect():数据库链接函数
query():SQL语句执行函数
execute():SQL语句执行函数,与query()函数使用方式略有不同,具体可参考pear/db/common.php文件
setFetchMode():设定返回记录集是数字索引数组还是关联数组或者对象
numRows():返回记录集有多少行
numCols():返回记录集有多少列
free():释放记录集
disconnect():关闭数据库链接
affectedRows():操作影响的记录行数
isManip():判断一个查询是数据处理还是数据定义操作
平台移植说明:
理想情况下,移植到其他类型的数据库平台时,只需要修改PEAR DB中的DSN字符串参数即可,但是对于一些特定数据库特有的查询,当移植到其他数据库平台时只能进行修改了。
其他:
DB目录下存了所有PHP PEAR DB支持的相关数据库,有兴趣的朋友可看看。
通过上述代码实例,我们就可以利用PHP PEAR DB类来实现不同数据库的访问功能。
注:PHP网站开发教程-leapsoul.cn版权所有,转载时请以链接形式注明原始出处及本声明,谢谢。