1)总比较






PDO
mysqli




数据库支持
12种不同的数据库支持
支持MySQL


美国石油学会
面向对象的程序设计
OOP的过程


连接
容易的
容易的


命名参数
支持
我不支持它。


对象映射支持
支持
支持


预处理语句

(客户端)
支持
我不支持它。


性能
快速的
快速的


支持存储过程
支持
支持







2连接方式



看看两者都连接到数据库的方式。

复制代码代码如下所示:

/ / PDO

为PDO =新PDO(MySQL:主机= localhost;北京数据库

/ / mysqli,面向过程的模式

$ mysqli = mysqli_connect('localhost ','username ','password ','database);

/ / mysqli,面向对象

$ mysqli =新mysqli('localhost ','username ','password ','database);



3数据库支持



PDO支持多种数据库,但只支持mysql mysqli



4命名参数名称参数

PDO的方式:

复制代码代码如下所示:

$params =阵列(测试:用户名= >,电子邮件= > $邮件:last_login= >时间(3600));

为PDO ->准备('

从用户中选择*

用户名=用户名

电子邮件=电子邮件

和last_login >:last_login);



和mysqli麻烦,不支持这样的,只:

复制代码代码如下所示:

查询=美元美元mysqli ->准备(

从用户中选择*

=用户名

和电子邮件

和last_login >);

为查询-> bind_param('sss '测试',为邮件,时间()- 3600);

$查询>执行();



在这种情况下,一个接一个问号的顺序,也更麻烦,不方便。

支持5个ORM映射

例如,有一个类用户,如下所示:

复制代码代码如下所示:

类用户

{

公共身份证;

公共first_name美元;

公共last_name美元;

公共功能信息()

{

返回。美元-> ID。# ':'美元-> first_name。。这last_name美元->;

}

}

为查询=选择ID,first_name,从用户last_name;

/ / PDO

结果=美元美元PDO ->查询($查询);

结果setfetchmode美元->(PDO::fetch_class,用户);

当(用户=结果- >获取())

{

用户(>)。;

}



mysqli是面向过程的方法:

复制代码代码如下所示:

如果($结果= mysqli_query($ mysqli,$查询)){

而($用户= mysqli_fetch_object(美元的结果,用户)){

用户(>)。;

}

}



mysqli采用面向过程的方法:

复制代码代码如下所示:

面向对象方法 / / mysqli。

如果($结果= $ mysqli ->查询($查询)){

而($用户= $结果-> fetch_object(用户)){

用户(>)。;

}

}



6预防SQL注入:



PDO手动设置

复制代码代码如下所示:

用户名为PDO::美元报价(美元_get { 'username});

为PDO ->查询(从users用户名= $用户名);



使用mysqli

复制代码代码如下所示:

用户名= mysqli_real_escape_string美元(美元_get { 'username});

$ mysqli ->查询(从users用户名= $用户名);



7 preparestament



PDO模式:

复制代码代码如下所示:

为PDO ->准备('select *用户,用户名为:用户名);

为PDO ->执行(阵列($ _get { 'username}:用户名= >));



MYSQLI:

复制代码代码如下所示:

查询=美元美元mysqli ->准备('select *用户,用户名为);

为查询-> bind_param(是的,_get美元{ 'username});

$查询>执行();



公司是否有通过本文链接PHP PDO和mysqli 2方面有了新的认识,我希望这篇文章能帮助你。