查询构造器之PDO

查询构造器的底层,用的是PHP数据库抽象层的PDO扩展。

为什么使用PDO?

PHP有两大类操作数据库的扩展,一类是专用扩展mysql、sqlite3等,一类是抽象层,如PDO等。

专用扩展如下(mysql为例):

$link = mysqli_connect("localhost","user","pwd","mydb");//固定为mysql数据库
$sql = "insert into users(name,pass) values('xiaoming','123456')";
mysqli_query($link,$sql); //一次性数据设定和编译

PDO如下

// dsn(data source name) mysql 或者 sqlite3 或者其他数据库 以mysql为例
$dsn = "mysql:host=localhost;dbname=mydb";
$pdo = new PDO($dsn,"user","pwd"); //不同数据库不同参数,后边操作一样
$sql = "insert into users(name,pass) values(:name,:pass)";
$pdo->prepare($sql); //预编译
$pdo->execute(['name'=>'xiaoming','pass'=>'123456']);//数据添加

数据库专用扩展和抽象层的区别,选择抽象层的好处?
1,单一接口 vs 统一接口
专用扩展只是针对一种数据库开发的,当更改数据库时,就要重新安装相应数据库扩展,也需要对代码重构。
而抽象层针对多种数据库提供统一接口,当更改数据库时,代码部分只需要修改少许链接配置(dsn)

2, sql注入 vs 避免sql注入
专用扩展是一次性完成sql语句、编译和数据添加,所以容易受到sql注入。
而PDO将sql语句的编译和数据添加分离,避免sql注入。

3,效率
由于第2点提到的预编译特点,sql命令预先编译,提高多次执行同一条操作命令时的速度。

$sql = "insert into users(name,pass) values(:name,:pass)";
$pdo->prepare($sql); //预编译
$pdo->execute(['name'=>'xiaoming','pass'=>'111111']);//数据添加
$pdo->execute(['name'=>'xiaohong','pass'=>'222222']);//数据添加
...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值