1、编程:MySQLi面向对象中的查询操作
<?php //感恩 //认真的人该变了自己,坚持的人改变了命运! //日行一善,改变命运! require 'demo1.php'; $sql = "SELECT `staff_id`,`name`,`salary` FROM `staff` WHERE `salary`>?;"; $stmt = $mysqli->stmt_init(); if (!$stmt->prepare($sql)) { //打印sql语句检测阶段出错 exit($stmt->errno . ':' . $stmt->error); } //i代表整型类型 $stmt->bind_param('i', $salary); $salary = 5000; if (!$stmt->execute()) { //执行阶段出错 exit($stmt->errno . ':' . $stmt->error); } //存储结果集 $stmt->store_result(); //将结果集绑定到变量上 $stmt->bind_result($id, $name, $salary); if ($stmt->num_rows > 0) { while ($stmt->fetch()) { echo 'id:' . $id . ',name:' . $name . ',salary:' . $salary . '<br>'; } } else { exit('当前表中无数据<br>'); } //释放结果集 $stmt->free_result(); //关闭预处理 $stmt->close(); //关闭SQL连接 $mysqli->close();
点击 "运行实例" 按钮查看在线实例
2. 问答: PDO 的优势
PDO有非常多的操作却是MySQL扩展库所不具备的:
(1)PDO真正的以底层实现的统一接口数库操作接口,不管后端使用的是何种数据库,如果代码封装好了以后,应用层调用基本上差不多的,当后端数据库更换了以后,应用层代码基本不用修改.
(2)PDO支持更高级的DB特性操作,如:存储过程的调度等,mysql原生库是不支持的.
(3)PDO是PHP官方的PECL库,兼容性稳定性必然要高于MySQL Extension,可以直接使用 pecl upgrade pdo 命令升级.
(4)PDO可以防止SQL注入,确保数据库更加安全。
3. 编程:PDO 连接数据库
<?php //感恩 //认真的人该变了自己,坚持的人改变了命运! //日行一善,改变命运! //PDO PHP数据对象,提供了一个统一的访问接口 $dsn='mysql:host=127.0.0.1;dbname=php'; $user='root'; $password='root123'; try{ $pdo=new PDO($dsn,$user,$password); echo '连接成功!'; }catch(PDOException $e){ die('Connect Error:'.$e.getMessage()); } //关闭连接 $pdo=null;
点击 "运行实例" 按钮查看在线实例
4. 编程:PDO新增数据
<?php //感恩 //认真的人该变了自己,坚持的人改变了命运! //日行一善,改变命运! $pdo=new PDO('mysql:host=127.0.0.1;dbname=php','root','root123'); $sql="INSERT `user` SET `user_name`=:name,`email`=:email,`password`=sha1(:password);"; //预处理 $stmt=$pdo->prepare($sql); //绑定参数 $data=['name'=>'菩萨','email'=>'pusa@pusa.cn','password'=>'pusa']; $stmt->bindParam(':name', $data['name'], PDO::PARAM_STR); $stmt->bindParam(':email', $data['email'], PDO::PARAM_STR); $stmt->bindParam(':password', $data['password'], PDO::PARAM_STR); if($stmt->execute()){ echo '成功添加'.$stmt->rowCount().'条记录'; }else{ echo '<h3>添加失败:</h3>'; print_r($stmt->errorInfo()); } //批量添加 $stmt->execute(['name' => 'pusa1', 'email' => 'pusa1@php.cn', 'password' => 'pusa']); $stmt->execute(['name' => 'pusa2', 'email' => 'pusa2@php.cn', 'password' => 'pusa']); $stmt->execute(['name' => 'pusa3', 'email' => 'pusa3@php.cn', 'password' => 'pusa']); $stmt->execute(['name' => 'pusa4', 'email' => 'pusa4@php.cn', 'password' => 'pusa']); $stmt=null; $pdo=null;
点击 "运行实例" 按钮查看在线实例
5.编程: PDO更新数据
<?php //感恩 //认真的人该变了自己,坚持的人改变了命运! //日行一善,改变命运! $pdo = new PDO('mysql:host=127.0.0.1;dbname=php', 'root', 'root123'); $sql = "UPDATE `user` SET `user_name`=:name WHERE `user_id`=:id"; //预处理 $stmt = $pdo->prepare($sql); $stmt->execute(['name'=>'pusa','id'=>3]); echo '<h3>成功更新了'.$stmt->rowCount().'条数据</h3>'; $stmt = null; $pdo = null;
点击 "运行实例" 按钮查看在线实例
6. 编程: PDO 删除数据
<?php //感恩 //认真的人该变了自己,坚持的人改变了命运! //日行一善,改变命运! $pdo = new PDO('mysql:host=127.0.0.1;dbname=php', 'root', 'root123'); $sql = "DELETE FROM `user` WHERE `user_id`=:id"; //预处理 $stmt = $pdo->prepare($sql); //$stmt->execute(['name' => 'pusa4']); if ($stmt->execute(['id' => 10])) { echo '<h3>成功删除了' . $stmt->rowCount() . '条记录</h3>'; } else { echo '<h3>无删除</h3>'; print_r($stmt->errorInfo()); exit(); } $stmt = null; $pdo = null;
点击 "运行实例" 按钮查看在线实例
7. 编程:PDO查询数据
查询方式1
<?php //感恩 //认真的人该变了自己,坚持的人改变了命运! //日行一善,改变命运! $pdo = new PDO('mysql:host=127.0.0.1;dbname=php', 'root', 'root123'); $sql = "SELECT `user_name`,`email` FROM `user` WHERE `user_id`<:id"; //预处理 $stmt = $pdo->prepare($sql); //$stmt->execute(['name' => 'pusa4']); if ($stmt->execute(['id' => 8])) { echo '<h3>成功选择了' . $stmt->rowCount() . '条记录</h3>'; } else { echo '<h3>无选择</h3>'; print_r($stmt->errorInfo()); exit(); } $rows=$stmt->fetchAll(); foreach($rows as $row){ echo 'name:',$row['user_name'],',Email:',$row['email'],'<br>'; } $stmt = null; $pdo = null;
点击 "运行实例" 按钮查看在线实例
查询方式2
<?php //感恩 //认真的人该变了自己,坚持的人改变了命运! //日行一善,改变命运! echo '<pre>'; $pdo = new PDO('mysql:host=127.0.0.1;dbname=php', 'root', 'root123'); $sql = "SELECT `user_name`,`email` FROM `user` WHERE `user_id`<:id"; //预处理 $stmt = $pdo->prepare($sql); //$stmt->execute(['name' => 'pusa4']); if ($stmt->execute(['id' => 8])) { echo '<h3>成功选择了' . $stmt->rowCount() . '条记录</h3>'; } else { echo '<h3>无选择</h3>'; print_r($stmt->errorInfo()); exit(); } //第1行第1列 echo $stmt->fetchColumn(0), '<br>'; //第2行第1列 echo $stmt->fetchColumn(0), '<br>'; //第1行第2列 echo $stmt->fetchColumn(1), '<br>'; $stmt = $pdo->prepare('SELECT `staff_id`,`name`,`salary` FROM `staff` WHERE `salary`<:salary');; $stmt->execute(['salary'=>6000]); //不推荐,有可能返回结果不正确 echo '工资数小于6000的是'.$stmt->rowCount().'<br>'; $stmt->bindColumn('name',$name); $stmt->bindColumn('salary', $salary); while($stmt->fetch(PDO::FETCH_BOUND)){ echo 'name:',$name,',salary:',$salary,'<br>'; } //推荐这种方法 $stmt = $pdo->prepare('SELECT COUNT(*) FROM `staff` WHERE `salary`>:salary'); $stmt->execute(['salary' => 6000]); echo '工资数大于6000的是'.$stmt->fetchColumn().'<br>'; //var_dump($stmt->fetchAll()); $stmt = null; $pdo = null;
点击 "运行实例" 按钮查看在线实例
8. 问答:获取结果集记录数量的正确方式是什么?
//推荐这种方法
$stmt = $pdo->prepare('SELECT COUNT(*) FROM `staff` WHERE `salary`>:salary');
$stmt->execute(['salary' => 6000]);
echo '工资数大于6000的是'.$stmt->fetchColumn().'<br>';
9.小结
本章学习了PDO方式的增删改查,对我们后续工作帮助很大。