pdo mysql 和 mysqli_PDO和Mysqli对比分析,你总结归纳一下吧

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

227fd6b3a71c37f84196d17886079a45.png

连接方式

// PDO

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

// mysqli面向过程

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

// mysqli面向对象

$mysqli = newmysqli( '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;

对象映射

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

classUser{

public$id;

public$first_name;

public$last_name;

publicfunctioninfo

{

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哦

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值