首页 > 数据库 >对比分析PDO和Mysqli

对比分析PDO和Mysqli

时间:2022-11-25 15:07:11浏览次数:37  
标签:username pdo mysqli PDO query Mysqli 对比 SELECT


php操作mysql数据库,大家都知道有三种驱动,mysql mysqli pdo,其中mysql在php7之后被废除了。不是本文重点。咱现在来分析一下mysqli和PDO的区别,下面一张表用来说明他们的区别

对比分析PDO和Mysqli_数据库

 

连接方式

// PDO
$pdo = new PDO("mysql:host=localhost;dbname=database", 'username', 'password');

// mysqli面向过程
$mysqli = mysqli_connect('localhost','username','password','database');

// mysqli面向对象
$mysqli = new mysqli('localhost','username','password','database');

 

对数据库的支持方面

pdo多种支持

代码表现

var_dump(PDO::getAvailableDrivers());

 

参数绑定

POD方式

$params = array(':username' => 'test', ':email' => $mail, ':last_login' => time() - 3600);

$pdo->prepare('
SELECT * FROM users
WHERE username = :username
AND email = :email
AND last_login > :last_login');

$pdo->execute($params);

 

mysqli方式

$query = $mysqli->prepare('
SELECT * FROM users
WHERE username = ?
AND email = ?
AND last_login > ?');

$query->bind_param('sss', 'test', $mail, time() - 3600);
$query->execute();

 

对象映射

假设我们有一个类,是如下这样

class User {
public $id;
public $first_name;
public $last_name;

public function info()
{
return '#'.$this->id.': '.$this->first_name.' '.$this->last_name;
}
}

 

再看看两者的方式

$query = "SELECT id, first_name, last_name FROM users";

// PDO
$result = $pdo->query($query);
$result->setFetchMode(PDO::FETCH_CLASS, 'User');

while ($user = $result->fetch()) {
echo $user->info()."\n";
}
// MySQLI, procedural way
if ($result = mysqli_query($mysqli, $query)) {
while ($user = mysqli_fetch_object($result, 'User')) {
echo $user->info()."\n";
}
}
// MySQLi, object oriented way
if ($result = $mysqli->query($query)) {
while ($user = $result->fetch_object('User')) {
echo $user->info()."\n";
}
}

 

安全方面

二者都可以防止sql注入

代码

// PDO, "manual" escaping
$username = PDO::quote($_GET['username']);

$pdo->query("SELECT * FROM users WHERE username = $username");

// mysqli, "manual" escaping
$username = mysqli_real_escape_string($_GET['username']);

$mysqli->query("SELECT * FROM users WHERE username = '$username'");

 

预处理机制

// PDO, prepared statement
$pdo->prepare('SELECT * FROM users WHERE username = :username');
$pdo->execute(array(':username' => $_GET['username']));

// mysqli, prepared statements
$query = $mysqli->prepare('SELECT * FROM users WHERE username = ?');
$query->bind_param('s', $_GET['username']);
$query->execute();

 

总结

pdo的强大之处是显而易见的,支持多种数据库,还有参数绑定是特色,所以还是要会用PDO哦

标签:username,pdo,mysqli,PDO,query,Mysqli,对比,SELECT
From: https://blog.51cto.com/u_13940603/5886724

相关文章

  • Zabbix与乐维监控对比分析(一)——架构、性能篇
     近年来,Zabbix凭借其近乎无所不能的监控及优越的性能一路高歌猛进,在开源监控领域独占鳌头;而作为后起的新锐IT监控平台——乐维监控,则不断吸收Zabbix,Prometheus等优秀......
  • Zabbix与乐维监控对比分析(一)——架构、性能篇
    近年来,Zabbix凭借其近乎无所不能的监控及优越的性能一路高歌猛进,在开源监控领域独占鳌头;而作为后起的新锐IT监控平台——乐维监控,则不断吸收Zabbix,Prometheus等优秀开源平......
  • Zabbix与乐维监控对比分析(一)——架构、性能篇
    近年来,Zabbix凭借其近乎无所不能的监控及优越的性能一路高歌猛进,在开源监控领域独占鳌头;而作为后起的新锐IT监控平台——乐维监控,则不断吸收Zabbix,Prometheus等优秀开源平......
  • 横向对比主流BI软件优势,企业要按需选择
    挖掘数据价值,服务企业决策,成为企业当前及未来阶段发展的重要抓手,商业智能工具市场迎来爆发。琳琅满目的商业智能工具令观望中的企业看花了眼,主流QuickBI、帆软FineBI等BI......
  • Blazor和Vue对比学习(进阶2.2.5):状态管理之持久化保存(3),LocalStorage和IndexedDB
    PS1:点击查看Blazor中C#和JS互操作PS2:Vue中,可以直接使用LocalStorage和IndexedDB对象,本章节案例主要以Blazor的使用为主 一、Storage对象1、浏览器内置的键值对存储。l......
  • 乐维监控与Zabbix对比分析(一)——架构、性能
    近年来,Zabbix凭借其近乎无所不能的监控及优越的性能一路高歌猛进,在开源监控领域独占鳌头;而作为后起的新锐监控平台——乐维监控,则不断吸收Zabbix,Prometheus等优秀开源平台......
  • Web App、Hybrid App、Native App 横向对比
    移动端的开发方式三分天下:纯原生(NativeApp)、混合开发(HybirdApp)、网页应用(WebApp)。​编辑纯原生(NativeApp):是在Android、iOS等移动平台上利用提供的开发语言、开发类库......
  • 容器通信flannel和calico对比
    容器通信flannel和calico对比发布文章 Kubernetes跨主机容器之间的通信组件,目前主流的是flannel和calico,本文对两个组件进行简单介绍和对比。calico包括如下重要组件......
  • SqlServer时间对比的问题
    存储过程如下:createproccleanup_xxx@starttimedatetime,@endtimedatetimeasbegindeletefromxxxwhereaddeddate>=@starttimeandaddeddate<=@endtimeend......
  • 随想录(对比着c学java)
    【声明:版权所有,欢迎转载,请勿用于商业用途。  对于java,有两种论调。一种是鄙视,认为java是个人都能学,完全体现不出程序员的水平。还有一种,就是拔高java,认为java无所不能,j......