php pdo增删改查语句,PDO的增删改查操作0830

0830作业

实例

echo '

 0830作业第一题:mysqli预处理查询操作 

';

echo '

 查询:年龄大于25,工资大于8000
';

//连接数据库

require 'demo1.php';

//准备SQL语句

$sql = "SELECT `id`,`name`,`age` ,`salary`  FROM `staff` WHERE `age` > ? && `salary` > ?;";

// 创建预处理对象,mysqli_stmt_init() 函数初始化声明并返回 mysqli_stmt_prepare() 使用的对象。

$stmt = $mysqli->stmt_init();

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

//绑定参数,绑定一个参数到指定的变量名,将用户数组与sql语句的占位符进行绑定

$stmt->bind_param('ii', $age,$salary);

//设置参数

$age =25;

$salary=8000;

if ($stmt->execute()) {

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

$stmt->store_result();

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

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

//结果集是否不为空,只有不为空的时候才遍历

if ($stmt->num_rows > 0) {

// 循环遍历结果集,fetch()每次获取一条记录,并将指针自动下移

while ($stmt->fetch())

{

echo '

id:'.$id.'---姓名:'  .$name.'---年龄:'  .$age.'---工资:'  .$salary.'

'.'
';

}

}

else

{

exit('

当前表中没有数据

');

}

// 释放结果集

$stmt->free_result();

}

else

{

//返回执行阶段的出错信息,$stmt->errno出错代码,出错描述

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

}

}

else

{

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

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

}

//注销stmt对象

$stmt->close();

//关闭连接

$mysqli->close();

运行实例 »

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

77c1e6f61ed99319f43c0c97f80f9980.png

2.问答:PDO的优势?

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

1、PDO真正的以底层实现的统一接口数库操作接口,不管后端使用的是何种数据库,

如果代码封装好了以后,应用层调用基本上差不多的,当后端数据库更换了以后,应用层代码基本不用修改.

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

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

4、PDO可以防止SQL注入,确保数据库更加安全使用语句预处理将帮助你免于SQL注入攻击。

总之就是,PDO应用的比mysqli较广泛,使用起来较方便,PDO可以使用相同的sql语句执行不同的数据库,

而mysqli只能执行mysql一种数据库。并且PDO有预处理,一条预处理语句是一条预编译的 SQL 语句,它可以被使用多次,

每次只需将数据传至服务器。而且可以对使用占位符的数据进行安全处理,防止SQL注入攻击。

实例

/**

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

*/

echo '

 0830作业第3题:编程:PDO 连接数据库 
';

// 数据源:设置数据库的类型,以及数据库服务器和默认的数据库

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

//用户名

$user = 'root';

//密码

$pass = 'root';

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

try {

//代码区

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

//echo '

连接成功

';

}

catch (PDOException $e)

{

//异常处理

die('Connect ERROR! :'. $e->getMessage());

}

// 关闭连接

//$pdo = null;

//unset($pdo);

运行实例 »

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

实例

/**

* 新增记录

*/

echo '

 0830作业第4题:编程:PDO新增数据 
';

//1连接数据库

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

//2.准备SQL语句,占位符我们不再用?,用"命名占位符"

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

//3.创建预处理对象

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

//4.执行添加

$stmt->execute(['name'=>'周芷若1','email'=>'zzr@php.cn','password'=>'66896']);

$stmt->execute(['name'=>'周芷若2','email'=>'123@php.cn','password'=>'66698']);

$stmt->execute(['name'=>'周芷若3','email'=>'345@php.cn','password'=>'80666']);

$stmt->execute(['name'=>'周芷若4','email'=>'789@php.cn','password'=>'69780']);

$stmt->execute(['name'=>'周芷若5','email'=>'r77@php.cn','password'=>'12676']);

echo '

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

';

运行实例 »

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

实例

echo '

 0830作业第5题:编程:PDO更新数据 
';

//连接数据库

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

//准备SQL语句,占位符我们不再用?,用"命名占位符"

$sql = "UPDATE `user` SET `name`= :name ,`email`= :email WHERE `id` = :id";

//创建预处理对象

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

$stmt->execute(['name'=>'赵敏','email'=>'888@163.com','id'=>90]);

echo '

成功更新了'.$stmt->rowCount().'条记录

';

$stmt = null;

// 关闭连接

$pdo = null;

运行实例 »

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

实例

/**

* 删除记录

*/

echo '

 0830作业第6题:编程:PDO删除数据 
';

//连接数据库

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

//准备SQL语句,占位符我们不再用?,用"命名占位符"

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

//创建预处理对象

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

if ($stmt->execute(['id'=>2]))

{

// rowCount(): 返回受影响的记录数量

echo '

成功删除了'.$stmt->rowCount().'条记录

';

}

else

{

echo '

无删除

';

// errorInfo() 返回一个关于上一次语句句柄执行操作的错误信息的数组

// 0 SQLSTATE 错误码, 1具体驱动错误码, 2具体驱动错误信息。

print_r($stmt->errorInfo());

exit();

}

$stmt = null;

// 关闭连接

$pdo = null;

运行实例 »

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

9addc1dd22e63c7d03d3d52553a03c5b.png

实例

echo '

 0830作业第7题:编程:PDO查询数据 
';

//连接数据库

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

//准备SQL语句,占位符我们不再用?,用"命名占位符"

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

//创建预处理对象

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

//执行查询

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

// 一次性取出

//$rows = $stmt->fetchAll();

//foreach ($rows as $row) {

//    echo 'name: ',$row['name'],',   email: ',$row['email'],'
';

//}

//因为fetch()取出来的数据,包括索引数组和关联数组

//PDO::FETCH_ASSOC:返回一个索引为结果集列名的数组,就是结果只显示关联数组部分

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

echo var_export($row),'
';

}

运行实例 »

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

c1f6332fd11ae9a59236d4f69daf10bf.png

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

方式1、使用count()来计算查询结果集转换为数组后的单元数再用fetchColumn()来获取结果集

方式2、rowCount()是返回SQL语句执行后影响的行数,结果看上去是正确的,但是是有问题的

总之,方式1 使用count()再用fetchColumn()来获取结果集记录数量的正确方式。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值