MySQL--->MySQLi--->PDO

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中的方法,就可以操纵数据库了,至于底层怎么实现的,你根本不用关心

时间: 2024-08-05 23:52:47

MySQL--->MySQLi--->PDO的相关文章

php的mysql\mysqli\PDO(二)mysqli

原文链接:http://www.orlion.ga/1147/ mysqli有面向对象风格和面向过程风格,个人感觉还是用面向对象风格比较好(毕竟是面向对象) 1.mysqli::_construct() mysqli::__construct ([ string $host = ini_get("mysqli.default_host") [, string $username = ini_get("mysqli.default_user") [, string $

php的mysql\mysqli\PDO(三)PDO

原文链接:http://www.orlion.ga/1153/ PDO是一种数据库抽象层,不止可以访问mysql还可以访问其他数据库. 一.__construct() PDO::__construct ( string $dsn [, string $username [, string $password [, array$driver_options ]]] ) $dsn:通常,一个 DSN 由 PDO 驱动名.紧随其后的冒号.以及可选的驱动程序的数据库连接变量信息,如主机名.端口和数据库名

mysqli和mysql和pdo查询

  mysql mysql_connect($db_host, $db_user, $db_password); mysql_select_db($dn_name); $result = mysql_query("SELECT `name` FROM `users` WHERE `location` = '$location'"); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { echo $row['name']; }

MySQLi & PDO

MySQLi <?php $servername = "localhost"; $username = "username"; $password = "password"; // 创建连接 $conn = new mysqli($servername, $username, $password); // 检测连接 if ($conn->connect_error) { die("连接失败: " . $conn-&

mysql通过PDO扩展进行数据库连接的方法

//PHP通过PDO方式连接到mysql <?php  $dsn="mysql:dbname=test;host=localhost"; $user="root"; $pass=""; $link=new PDO($dsn,$user,$pass); if($link){     echo "connect success with PDO"; }else{     echo "can't connect my

封装数据库mysql, mysqli

<?php header("content-type:text/html;charset=utf-8"); class db{    //私有的静态属性    private static $dbcon = false ;    //私有的构造方法    private function __construct($dbname){        $dbcon = @mysql_connect('127.0.0.1', 'root', 'root');        mysql_s

mysql --mysqli::multi_query 和 mysqli_multi_query

语法: 对象化:bool mysqli::multi_query ( string $query ) 过程化:bool mysqli_multi_query ( mysqli $link , string $query ) 用法: mysqli::multi_query ( string $query ) $dataStr = '要执行的多条sql语句'; $mysqli = new mysqli(hostname,username,password,database); //连接MySQL数据

mysql+php+pdo批量添加大数据

1.使用insert into插入 ini_set('max_execution_time','0');//限制超时时间,因为第一种时间较长,索性设为0不限制 $pdo = new PDO("mysql:host=localhost;dbname=oradt_cloud1520","root","123456");  for($i=0; $i<100000; $i++){ $str = strrand(32); $pdo -> exe

mysql中PDO参数化引号引起的Warning: PDOStatement::execute(): SQLSTATE[HY093]:报错

sql语句之前是这样写的:INSERT INTO tablename SET a = ':a',b = ':b',c = ':c',d = :d,e = :e $data = array ( [':a'] => 1, [':b'] => 2, [':c'] => 3,[':d'] => 4, [':e'] => 5,) $prepareResualt = $pdo->prepare($sql); $prepareResualt->execute($data); 出

面向对象第七天----数据库抽象层PDO

php操作mysql方法:mysqlmysqliPDO 数据库抽象层--PDO (重点)======================================================================= 1. pdo的作用 pdo(php data object) 扩展类库,为PHP访问数据库提供了轻量级的,统一的接口.无论使用 什么数据库,都可以通过一致的函数执行查询和获取数据 优势: ① 对不同的数据库提供统一的操作方式 ② 对执行批量SQL效率高,对PHP操作S