php pdo 优势,PDO的优势与增删改查作业

mysqli面向对象的查询操作

实例

/**

* Created by PhpStorm.

* User: 714326675

* Date: 2018/9/1

* Time: 15:07

*/

//mysqli数据库预处理查询

//设置数据库连接需要的信息

$db=['host'=>'127.0.0.1','username'=>'root','password'=>'','dbname'=>'test'];

//报告除了警告外的所有错误

error_reporting(E_ALL ^E_WARNING);

//连接数据库

$mysqli = new mysqli($db['host'],$db['username'],$db['password'],$db['dbname']);

//判断连接结果

if($mysqli->connect_errno){

die('连接错误'.$mysqli->connect_errno.':'.$mysqli->connect_error);

}

//设置字符集

$mysqli->set_charset('utf8');

//sql语句

$sql="SELECT `id`,`name`,`salary` FROM `user` WHERE `salary`>?";

//初始化声明并返回 mysqli_stmt_prepare() 使用的对象。

$stmt=$mysqli->stmt_init();

//准备执行一个 SQL 语句

if($stmt->prepare($sql)){

//参数绑定

$stmt->bind_param('i',$salary);

//设置参数

$salary=5000;

//判断执行是否成功

//执行

if($stmt->execute()){

//获取结果集并放到缓存区

$stmt->store_result();

//将结果集中的列绑定到变量上

$stmt->bind_result($id,$name,$salary);

//查询结果集是否不为空

if($stmt->num_rows >0){

//循环遍历结果集

//fetch()没错获取一条记录,并将指针自动下移

while($stmt->fetch()){

echo 'id====>',$id,'|姓名====>',$name,'|工资====>',$salary,'
';

}

}else{

die('无数据');

}

//释放结果集

$stmt->free_result();

}else{

//返回执行阶段的出错信息

exit($stmt->errno.':'.$stmt->error);

}

}else{

//返回sql检测阶段的出错信息

exit($stmt->errno.':'.$stmt->error);

}

//注销stmt对象

$stmt->close();

//关闭连接

$mysqli->close();

运行实例 »

点击 "运行实例" 按钮查看在线实例

9e949cb255828310a8f7693e10764f1d.png

问答:PDO的优势?

PDO有非常多的操作却是MySQL扩展库所不具备的:

1:PDO真正的以底层实现的统一接口数库操作接口,不管后端使用的是何种数据库,如果代码封装好了以后,应用层调用基本上差不多的,当后端数据库更换了以后,应用层代码基本不用修改.

2:PDO支持更高级的DB特性操作,如:存储过程的调度等,mysql原生库是不支持的.

3:PDO是PHP官方的PECL库,兼容性稳定性必然要高于MySQL Extension,可以直接使用 pecl upgrade pdo 命令升级.

4:PDO可以防止SQL注入,确保数据库更加安全

三.PDO连接数据库

实例

/**

* Created by PhpStorm.

* User: 714326675

* Date: 2018/9/1

* Time: 19:07

*/

//PDO PHP数据对象,是PHP操作所有数据库的抽象层,提供了一个统一的访问接口

//连接pdo

//设置数据源

$dsn='mysql:host=127.0.0.1;dbname=test';

$user='root';

$passwd='';

//实例化PDO类,创建PDO对象,并完成对数据库的连接

try{

$pdo = new PDO($dsn,$user,$passwd);

echo '

连接成功啦

';

}catch (PDOException $e){

exit('connect ERROR!:'.$e->getMessage());

}

//关闭连接方式

//方式1

//$pdo=null;

//方式2

//unset($pdo);

运行实例 »

点击 "运行实例" 按钮查看在线实例

aaa5047c8fe8b51977f92cca074ab0a5.png

四.数据库新增数据

实例

/**

* PDO

* 数据的录入

*/

//设置数据源

$dsn='mysql:host=127.0.0.1;dbname=test';

//设置用户名

$user='root';

//设置密码

$passwd='';

//连接数据库,新建pdo

$pdo=new PDO($dsn,$user,$passwd);

//sql语句

$sql="INSERT `user` SET `name`=:name,`salary`=:salary,`email`=:email,`passwd`=sha1(:passwd); ";

//创建预处理对象

$stmt=$pdo->prepare($sql);

//设置需要录入的数据信息

$data=['name'=>'赵大','salary'=>12435,'email'=>'zd@qq.com','passwd'=>'abc'];

//绑定参数

$stmt->bindParam(':name',$data['name'],PDO::PARAM_STR);

$stmt->bindparam(':salary',$data['salary'],PDO::PARAM_INT);

$stmt->bindParam(':email',$data['email'],2);

$stmt->bindParam(':passwd',$data['passwd'],2);

//执行语句与判断执行结果

if($stmt->execute()){

echo '

成功添加了',$stmt->rowCount(),'条记录

';

}else{

echo '

添加失败

>';

print_r($stmt->errorInfo());

exit();

}

//关闭

$stmt=null;

//关闭连接

$pdo=null;

运行实例 »

点击 "运行实例" 按钮查看在线实例

d7342cebc02550a9973959d14660d901.png

五.PDO更新数据

实例

/**

* 更新数据

*/

//连接数据库

$pdo= new PDO('mysql:host=127.0.0.1;dbname=test','root','');

//sql语句

$sql="UPDATE `user` SET `salary`=:salary WHERE `id`=:id;";

//创建预处理对象

$stmt=$pdo->prepare($sql);

//执行

$stmt->execute(['salary'=>3,'id'=>5]);

//输出执行成功记录行数

echo '

成功更新了',$stmt->rowCount(),'条数据

';

//关闭$stmt

$stmt=null;

//关闭连接

$pdo=null;

运行实例 »

点击 "运行实例" 按钮查看在线实例

351b1473eed1bbd7d01c243266dec64e.png

六.PDO删除数据

实例

/**

* 删除记录

*/

$pdo= new PDO('mysql:host=127.0.0.1;dbname=test','root','');

//sql语句

$sql="DELETE FROM `user` WHERE `id`=:id;";

//创建预处理对象

$stmt=$pdo->prepare($sql);

//执行

$stmt->execute(['id'=>4]);

//输出执行成功记录行数

echo '

成功删除了',$stmt->rowCount(),'条数据

';

//关闭$stmt

$stmt=null;

//关闭连接

$pdo=null;

运行实例 »

点击 "运行实例" 按钮查看在线实例

0484bf1bcc8894cb85bc0196d5d0636c.png

七.PDO查询数据

实例

/**

* Created by PhpStorm.

* User: 714326675

* Date: 2018/9/1

* Time: 22:34

*/

$pdo= new PDO('mysql:host=127.0.0.1;dbname=test','root','');

//sql语句

//$sql="SELECT * FROM `user` WHERE `id`<>:id;";//不等于

//$sql="SELECT * FROM `user` WHERE `id`<=:id;";//小于等于

//$sql="SELECT * FROM `user` WHERE `id`=:id;";//等于

//$sql="SELECT * FROM `user` WHERE `id`>:id;";//大于

$sql="SELECT * FROM `user` WHERE `id`<:id>

//创建预处理对象

$stmt=$pdo->prepare($sql);

//执行

$stmt->execute(['id'=>5]);

//输出执行成功记录行数

echo '

成功查询了',$stmt->rowCount(),'条数据

';

//遍历数据

while($row=$stmt->fetch(PDO::FETCH_ASSOC)){

echo var_export($row),'
';

}

//关闭$stmt

$stmt=null;

//关闭连接

$pdo=null;

运行实例 »

点击 "运行实例" 按钮查看在线实例

00374a442353524649665c979843d425.png

实例

/**

* Created by PhpStorm.

* User: 714326675

* Date: 2018/9/2

* Time: 10:39

*/

//连接数据库

$pdo=new PDO('mysql:host=127.0.0.1;dbname=test','root','');

//sql语句

$sql="SELECT `id`AS 序号,`name` AS 名字,`salary` AS 工资 FROM `user` WHERE `id` 

//创建预处理

$stmt=$pdo->prepare($sql);

//设置参数

$data=['id'=>56];

//绑定参数:可省略

//$stmt->bindParam(':salary',$data['id'],PDO::PARAM_INT);

//执行

$stmt->execute($data);

//将结果集中的列绑定到变量上

//$stmt->bindColumn('序号',$id);

//$stmt->bindColumn('名字',$name);

//$stmt->bindColumn('工资',$salary);

//用列变量遍历结果集

//while ($stmt->fetch(PDO::FETCH_BOUND)) {

//    echo 'id:',$id,'姓名: ',$name, ',  工资: ', $salary, '
';

//}

//遍历结果集

//while($row=$stmt->fetch(PDO::FETCH_ASSOC)){

//   echo var_export($row),'
';

//}

//获取一行一列,无法获取同一行其它列

//echo $stmt->fetchColumn(0),'
';

//指针自动下移,获取二行2列

//echo $stmt->fetchColumn(1),'
';

$stmt=$pdo->prepare("SELECT * FROM `user` WHERE `salary` > :salary;");

$stmt->execute(['salary'=>10000]);

//结果看起来正确,但其实是有问题的,不要这样做

echo '工资大于10000的人数',$stmt->rowCount();

echo '


';

//这才是正确方法

//count(*)

//$stmt->fetchColumn()

$stmt=$pdo->prepare("SELECT count(*) FROM `user` WHERE `salary` > :salary;");

$stmt->execute(['salary'=>10000]);

echo '工资大于10000的人数',$stmt->fetchColumn();

运行实例 »

点击 "运行实例" 按钮查看在线实例

cccb920eaebb271eaad67b49957847fc.png

实例

/**

* Created by PhpStorm.

* User: 714326675

* Date: 2018/9/2

* Time: 11:05

*/

//连接数据库

$pdo=new PDO('mysql:host=127.0.0.1;dbname=test','root','');

//sql语句

$sql="SELECT `name`,`email`  FROM `user` WHERE `id` 

//创建预处理

$stmt=$pdo->prepare($sql);

//执行

$stmt->execute(['id'=>5]);

//将结果列绑定到变量中

$stmt->bindColumn('name',$name);

$stmt->bindColumn('email',$email);

//遍历结果集中的数据

while($stmt->fetch(PDO::FETCH_ASSOC)){

echo '姓名:',$name,',邮箱:',$email,'


';

}

//注销

$stmt=null;

//关闭连接

$pdo=null;

运行实例 »

点击 "运行实例" 按钮查看在线实例

八.问答: 获取结果集记录数量的正确方式是什么?

查询中使用count(*) 把结果整合成一列

然后使用$stmt->fetchColumn();获取记录数量

九.总结:PDO中的dsn为数据源,格式:'mysql:host=127.0.0.1;dbname=test'

连接数据库为new PDO(参数dsn,参数username,参数passwd)

还需要一条sql语句

需要创建预处理对象$stmt=$pdo->prepare($sql);

再弄参数$data=['name'=>'郭靖'] 参数弄成数组

参数绑定,这部分其实可以省略:$stmt->bindParam(':name',$data['name'],PDO::PARAM_STR);

执行:$stmt->execute();,如果第六部分省略就要这样写:$stmt->exexute($data);

执行完后需要注销$stmt和关闭$pdo:$stmt=null;$pdo=null; 当然也可以不写,不写的话关闭脚本会自动注销关闭

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值