本次作业主要包含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>'; } 以上注释内容均已测试体验理解*/
运行实例 »
点击 "运行实例" 按钮查看在线实例
手抄:
问答:获取结果集记录数量的正确方式是什么?
答: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 类需要多看多背多尝试,才能理解更深刻