博客列表 >PDO连接MySQL数据库,以及增删改查的操作方法 180830课后作业

PDO连接MySQL数据库,以及增删改查的操作方法 180830课后作业

一点蓝的博客
一点蓝的博客原创
2018年09月04日 23:56:43828浏览

本次作业主要包含PDO(php data object)连接MySQL数据库,以及相关数据的增、删、改、查操作

实例1数据库连接以及新增数据

<?php
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root');//连接数据库并返回pdo对象
/*$sql = "INSERT `user` SET `user_name`= :user_name , `email`= :email, `password`= sha1(:password);";//准备新增数据sql语句,并且使用命名占位符:name(mysqli中使用的是?占位符)
$stmt = $pdo -> prepare($sql);//创建预处理对象
$data = ['user_name'=>'Sul666','email'=>'sy@qq.com','password'=>888];//设置参数
$stmt -> bindParam(':user_name',$data['user_name'],PDO::PARAM_STR);
$stmt -> bindParam(':email',$data['email'],PDO::PARAM_STR);
$stmt -> bindParam(':password',$data['password'],PDO::PARAM_STR);
if ($stmt->execute()){//执行语句
    echo '<h3>成功添加了'.$stmt->rowCount().'条记录</h3>';//rowCount(): 返回受影响的记录数量
} else {
    echo '<h3>添加失败</h3>';
    print_r($stmt->errorInfo());//返回的错误信息是一个数组
    exit();
}*/
//优化写法
$stmt = $pdo -> prepare("INSERT `user` SET `user_name`= :user_name , `email`= :email, `password`= sha1(:password);");//创建预处理对象
$stmt->execute(['user_name'=>'Sul111','email'=>'sy1@qq.com','password'=>888]);
$stmt->execute(['user_name'=>'Sul222','email'=>'sy2@qq.com','password'=>888]);
$stmt->execute(['user_name'=>'Sul333','email'=>'sy3@qq.com','password'=>888]);
$stmt->execute(['user_name'=>'Sul444','email'=>'sy4@qq.com','password'=>888]);
$stmt->execute(['user_name'=>'Sul555','email'=>'sy5@qq.com','password'=>888]);
$stmt->execute(['user_name'=>'Sul777','email'=>'sy7@qq.com','password'=>888]);
echo '<h3>成功添加了'.$stmt->rowCount().'条记录</h3>';//rowCount(): 返回受影响的记录数量
$stmt = null;//关闭预处理对象
$pdo = null;//关闭连接

运行实例 »

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

实例2更新数据

<?php
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root');//连接数据库并返回pdo对象
$stmt = $pdo->prepare("UPDATE `user` SET `email`= :email WHERE `id`= :id");//创建预处理对象
$stmt->execute(['email'=>'suyh666@qq.com','id'=>9]);//执行更新语句
$stmt->execute(['email'=>'suyh555@qq.com','id'=>8]);//执行更新语句
$stmt->execute(['email'=>'suyh444@qq.com','id'=>7]);//执行更新语句
$stmt->execute(['email'=>'suyh333@qq.com','id'=>6]);//执行更新语句
$stmt->execute(['email'=>'suyh222@qq.com','id'=>5]);//执行更新语句
echo '<h3>成功更新了'.$stmt->rowCount().'条记录</h3>';//返回记录值
$stmt = null;//注销预处理对象
$pdo = null;//关闭连接
//UPDATE '表' SET `字段`= :name WHERE `id`= :id;//更新语句

运行实例 »

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

实例3删除数据

<?php
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root');//连接数据库并返回pdo对象
$stmt = $pdo->prepare("DELETE FROM `user` WHERE `id`= :id");//创建预处理对象
$stmt -> execute(['id'=> 9]);
$stmt -> execute(['id'=> 8]);
$stmt -> execute(['id'=> 7]);
$stmt -> execute(['id'=> 6]);
echo '<h3>成功删除了'.$stmt->rowCount().'条记录</h3>';//以上方法执行多条时返回记录值也为1
$stmt = null;//注销预处理对象
$pdo = null;//关闭连接
//DELETE FROM '表' WHERE `id`= :id;//删除语句

运行实例 »

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

实例4数据查询及返回值

<?php
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root');//连接数据库并返回pdo对象
$stmt = $pdo->prepare("SELECT `user_name`,`email` FROM `user` WHERE `id`< :id");//创建预处理对象
$stmt -> execute(['id' => 4]);
while ($rows = $stmt ->fetch(PDO::FETCH_ASSOC)){//PDO::FETCH_ASSOC:返回一个索引为结果集列名的数组
    echo var_export($rows),'<br>';//输出id<4的循环结果
}
//以下内容需要了解:
// 一次性取出fetchAll()
//$rows = $stmt->fetchAll();
//foreach ($rows as $row) {//遍历所有数组,弊端没有条件限制全部输出
//    echo 'name: ',$row['name'],',   email: ',$row['email'],'<br>';
//}
//fetchColumu()从结果集中的下一行返回单独的一列
//echo $stmt->fetchColumn(0),'<br>';//获取一行一列,无法获取同一行其它列
//echo $stmt->fetchColumn(1),'<br>';//指针自动下移,获取二行2列

/*$stmt = $pdo->prepare("select count(*) from staff where salary > :salary");//创建预处理对象,查询表staff,查询条件 salary,
$stmt->execute(['salary'=>4000]);//执行查询 条件salary大于4000
echo '工资大于4000的人数: '. $stmt->fetchColumn();//获取结果集记录数量的方法:通过以上count()查询符合条件的数量然后通过fetchCloumn()返回行数即可*/

/*//将结果集中的列绑定到变量上
// bindColumn()绑定一列到一个 PHP 变量(数组)
//$stmt->bindColumn('user_name', $user_name);
//$stmt->bindColumn('email', $email);
//用列的变量来遍历结果集
while ($stmt->fetch(PDO::FETCH_BOUND)) {//返回 TRUE ,并分配结果集中的列值给 PDOStatement::bindColumn() 方法绑定的 PHP 变量。
    echo '姓名: ',$user_name, ',  邮箱: ', $email, '<br>';
}
以上注释内容均已测试体验理解*/


运行实例 »

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

手抄:

083001.jpg

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

答:rowCount主要针对写的操作(新增、删除、更新),返回结果值记录数量使用fetchColumn(),在准备查询语句时,用count()计算出查询的条数,通过fetchColumn()返回最后一行输出数值(ftchColumn()指针自动下移)。

总结:

1在连接MySQL数据库上和进行增删改查等操作的结构顺序上和mysqli类似,但是PDO使用时更为直接明了

2sql语句上的占位符使用  :命名

3绑定参数简化操作直接将参数写入execute()括号中

4写操作类(新增、更新、删除)的返回值用rowCount()(表示受影响的记录数量);查询操作根据条件在sql查询语句中使用count()计算一下查询条数,返回值用fetchColumn()

5bindColumn()绑定一列到一个 PHP 变量(数组);fetchColumu()从结果集中的下一行返回单独的一列;PDO::FETCH_ASSOC:返回一个索引为结果集列名的数组;PDO::FETCH_BOUND)) 返回 TRUE ,并分配结果集列值给 PDOStatement::bindColumn() 方法绑定的 PHP 变量。

6学习过mysqli的操作方法PDO的数据库连接以及增删改查操作相对容易理解,但PDO类及PDOStatement 类需要多看多背多尝试,才能理解更深刻

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议