mPHP核心框架封装的PDO数据库操作类实现增删改查
[文章作者:磨延城 转载请注明原文出处: https://mo2g.com/view/65/ ]
早在2011年,在学习Mysql的过程中就了解到一些提供数据库抽象层的访问接口,如PDO和ADODB.网上大部分的文档表明,这些数据库抽象层的用途在于,当把web程序的数据库从mysql改为postgresql或其他数据库的时候,从数据库中存取数据的方式无需改变.我的理解就是:换了数据库,也不用重写sql语句.
早在2011年,在学习Mysql的过程中就了解到一些提供数据库抽象层的访问接口,如PDO和ADODB。网上大部分的文档表明,这些数据库抽象层的用途在于,当把web程序的数据库从mysql改为postgresql或其他数据库的时候,从数据库中存取数据的方式无需改变。我的理解就是:换了数据库,也不用重写sql语句。
很长时间,我都没有尝试过使用这类数据库抽象层,理由很简单,我一直在用mysql数据库,没有更换的必要,为此自己封装了mysql、mysqli的数据库操作类。
直到2013年,回到南宁加入的第一家刚成立不久的互联网公司,他们使用PDO操作的postgresql数据库,再有关于PHP6的传闻(以后统一使用PDO操作数据库),才开始尝试把mysqli类重写成PDO类,加入mPHP核心框架中。
我在测试PDO的过程中发现,有部分功能在不同的数据库中,并不通用,举个简单的例子,mysql和postgresql这两个数据库,分别获取某一张表最后插入的ID。在mysql数据库中
<?php $pdo = new PDO('mysql:host=127.0.0.1;dbname=数据库', '用户名', '密码'); $intId = $pdo->lastInsertId(); echo $intId;//输出最后插入表中的ID
但是在postgresql数据库中,直接使用lastInsertId()就无法获取到数据,还得传递对应参数。比如要获取表mo2g_test中最后一个插入的ID,需要传递的参数为mo2g_test_id_seq。
<?php $pdo = new PDO('pgsql:host=127.0.0.1;dbname=数据库', '用户名', '密码'); $intId = $pdo->lastInsertId(); echo $intId;//错误 $intId = $pdo->lastInsertId('mo2g_test_id_seq'); echo $intId;//正确
虽然有些功能不兼容,但是主要的增删改查功能,都是没问题的,所以我只封装了PDO的常用功能:
1)连接数据库:__construct($arrConfig)
2)插入数据:insert($table,$arrData,$true = false)
3)删除数据:delete($table,$condition)
4)更新数据:update($table,$arrData,$condition)
5)查找数据:
select($select,$table,$condition = '',$order = array(), $limit = '')
query($strSql)
5)获取数据:
fetch()
fetch_all()
相应的功能的代码实现,请点击对应的连接进行查看,如果在使用的过程中遇上什么问题,可以给我留言。
我来说两句: