MySQL比较老(不是指MySQL这个软件老,而是说PHP中的那套MySQL的函数比较老了),而且有很多缺陷和不足,所以在PHP5.5版本起,就将这一套扩展废弃了,更是在PHP7的新版本中将其移除,同时,新增了MySQLi扩展和PDO数据库抽象层。
MySQLi从名称上就可以看出,它和MySQL关系一定不一般,MySQLi就是MySQL的升级版,其实用一个比较好理解的对比,比如C和C++,C语言是面向过程化编程,而C++在C的基础上新增了类的概念和模板泛型啥的,说的有点远了。。。MySQL就是一套完全面向过程的函数(API),而MySQLi呢,既可以实现面向过程(为了照顾老用户,基本上可以不用修改以前使用MySQL的代码,只需要将以前使用的函数名称中mysql后面加一个字母 i 即可,比如,mysql_connect()换成mysqli_connect()),同样,MySQLi还支持面向对象,MySQLi扩展中包含3个类,分别是mysqli,mysqli_stmt,mysql_result,功能比MySQL多了不止一点半点,当然,代价就是,三个类中的方法和属性很多,很多类中的方法的返回类型是另外一个类类型,比如mysqli中的预处理prepare()方法的返回值就是mysqli_stmt类型,所以,稍微复杂了一点,不过,多用几遍,就不会弄错了,实在记不住,查手册便是。
然后是数据库抽象层PDO,名称中的关键字是抽象层,说到抽象,在计算机网络协议当中,下层协议向上层协议提供本层应提供的服务,上层自然就要使用下层提供的服务,但是,上层才不会管下层协议是做了多大努力,费了多大劲才完成这些工作,上层只需要知道怎么用下层提供的服务。
PDO好像特别高深,一个特别好懂得例子就是编写函数和调用函数,比如我写了一个排序算法,只需要传一个数组名,可以将一个数组中的元素排序之后编程升序排列, 现在你需要一个升序排序函数,而你又不想自己写一个,那你就可以使用我的排序函数,使用的时候,直接传一个数组名即可,但是,你根本不用关心我用的什么排序方法,我可能用得最简单的冒泡排序,也可能是复杂的快速排序,然而,你都不用关心这个,只要能实现功能就行。
PDO就是这样,PDO可以说功能更强大,因为可以用PDO来对MySQL进行操作,也可以对Oracle,SQL Server进行操作,你不用再去查Oracle的那套函数或者SQL Server的那套函数,你只需要会PDO类中的那一套方法即可,只需要装上对应数据库的扩展驱动即可,就好像上面的例子中的排序函数,你要什么功能,你就找什么函数,找到对应数据库的扩展驱动后,你只需要用PDO中的方法,就可以操纵数据库了,至于底层怎么实现的,你根本不用关心