博客列表 >实例演示CURD预处理的各种方案

实例演示CURD预处理的各种方案

P粉479712293
P粉479712293原创
2022年11月26日 00:51:49590浏览

题目1:预处理第1种方案:匿名参数+索引数组

1.demo1.php文件:

  1. <?php
  2. // *预处理第1种方案:匿名参数+索引数组
  3. namespace _221124a;
  4. use PDO;
  5. // *连接
  6. $db = new PDO('mysql:dbname=phpedu1', 'root', 'root');
  7. // *sql语句:CURD(增删改查):insert
  8. $sql="INSERT INTO staff(`name`,`sex`,`eamil`)VALUES(?,?,?)";
  9. // $sql = 'INSERT `staff` SET `name`= ?,`sex`= ?,`email`= ?;';
  10. // *对sql语句进行预处理
  11. $stmt=$db->prepare($sql);
  12. // *放入实参
  13. $data=['刘备',0,'liubei@qq.com'];
  14. //* 执行sql
  15. $stmt->execute($data);
  16. //* 验证: 打印sql预处理命令(正式运行时注释掉)
  17. $stmt->debugDumpParams();
  18. echo '新增成功, id = ' . $db->lastInsertId() . '<br>';

2.浏览器效果图:

题目2:预处理第2种方案:命名参数+关联数组

1.demo2.php文件:

  1. <?php
  2. // *预处理第2种方案:命名参数+关联数组
  3. namespace _221124b;
  4. use PDO;
  5. // *连接
  6. $db = new PDO('mysql:dbname=phpedu1', 'root', 'root');
  7. // *sql语句:CURD(增删改查):insert
  8. $sql="INSERT INTO staff(`name`,`sex`,`eamil`)VALUES(:name,:sex,:email)";
  9. //$sql = 'INSERT `staff` SET `name`= :name,`sex`= :sex,`email`= :email;';
  10. // *对sql语句进行预处理
  11. $stmt=$db->prepare($sql);
  12. // *放入实参
  13. $data=['name'=>'关羽','sex'=>0,'email'=>'guanyu@qq.com'];
  14. //* 执行sql
  15. $stmt->execute($data);
  16. //* 验证: 打印sql预处理命令(正式运行时注释掉)
  17. $stmt->debugDumpParams();
  18. echo '新增成功, id = ' . $db->lastInsertId() . '<br>';

2.浏览器效果图:

题目3:预处理第3种方案:参数绑定:值绑定 bindValue()

1.demo3.php文件:

  1. <?php
  2. // *预处理第3种方案:参数绑定:值绑定 bindValue()
  3. namespace _221124c;
  4. use PDO;
  5. // *连接
  6. $db = new PDO('mysql:dbname=phpedu1', 'root', 'root');
  7. // *sql语句:CURD(增删改查):insert
  8. // $sql="INSERT INTO staff(`name`,`sex`,`eamil`)VALUES(?,?,?)";
  9. // *运用heredoc多行语句
  10. $sql=<<< SQL
  11. INSERT INTO staff (`name`,`sex`,`eamil`)
  12. VALUES (?,?,?);
  13. SQL;
  14. // *对sql语句进行预处理
  15. $stmt=$db->prepare($sql);
  16. // *bindValue(key,value,type): 匿名占位符,key:索引是从1开始
  17. $stmt->bindValue(1, '曹操', PDO::PARAM_STR);
  18. $stmt->bindValue(2, 0, PDO::PARAM_INT);
  19. $stmt->bindValue(3, 'caocao@qq.com', PDO::PARAM_STR);
  20. // 执行sql
  21. $stmt->execute();
  22. echo '新增成功, id = ' . $db->lastInsertId() . '<br>';

2.浏览器效果图:

题目4:预处理第4种方案:动态绑定bindParam()

1.demo4.php文件:

  1. <?php
  2. // *预处理第4种方案:动态绑定bindParam()
  3. namespace _221124d;
  4. use PDO;
  5. // *连接
  6. $db = new PDO('mysql:dbname=phpedu1', 'root', 'root');
  7. // *sql语句:CURD(增删改查):insert
  8. $sql="INSERT INTO staff(`name`,`sex`,`eamil`)VALUES(?,?,?)";
  9. // *对sql语句进行预处理
  10. $stmt=$db->prepare($sql);
  11. //* 引用绑定: 动态绑定,绑定的不是数据本身,而它的地址/引用/别名
  12. $stmt->bindParam(1, $name, PDO::PARAM_STR);
  13. $stmt->bindParam(2, $sex, PDO::PARAM_INT);
  14. $stmt->bindParam(3, $email, PDO::PARAM_STR);
  15. // *列表参数输入实参
  16. // list($name, $sex, $email)=['孔明', 0, 'kongmin@qq.com'];
  17. // *执行sql
  18. // $stmt->execute();
  19. // echo '新增成功, id = ' . $db->lastInsertId() . '<br>';
  20. // *再新增一条
  21. // *列表参数输入实参
  22. list($name, $sex, $email)=['赵云', 0, 'zaoyun@qq.com'];
  23. //*再执行sql
  24. $stmt->execute();
  25. echo '新增成功, id = ' . $db->lastInsertId() . '<br>';

2.浏览器效果图:

题目5:动态绑定中使用foreach()代替list()一次性插入多条语句

1.demo5.php文件:

  1. <?php
  2. // *动态绑定中使用foreach()代替list()一次性插入多条语句
  3. namespace _221124e;
  4. use PDO;
  5. // *连接
  6. $db = new PDO('mysql:dbname=phpedu1', 'root', 'root');
  7. // *sql语句:CURD(增删改查):insert
  8. $sql="INSERT INTO staff(`name`,`sex`,`eamil`)VALUES(?,?,?)";
  9. // *对sql语句进行预处理
  10. $stmt=$db->prepare($sql);
  11. //* 引用绑定: 动态绑定,绑定的不是数据本身,而它的地址/引用/别名
  12. $stmt->bindParam(1, $name, PDO::PARAM_STR);
  13. $stmt->bindParam(2, $sex, PDO::PARAM_INT);
  14. $stmt->bindParam(3, $email, PDO::PARAM_STR);
  15. // *利用二维数组来输入多条实参
  16. $data=[
  17. ['宋江',0,'songjian@qq.com'],
  18. ['林冲',0,'lincong@qq.com'],
  19. ['孙二娘',1,'sunerliang@qq.com'],
  20. ];
  21. // *相当于多次遍历list(x1,x2,x3)=[y1,y2,y3]
  22. foreach ($data as list($name, $sex, $email)) {
  23. // *执行sql
  24. $stmt->execute();
  25. echo '新增成功, id = ' . $db->lastInsertId() . '<br>';
  26. }

2.浏览器效果图:

题目6:sql语句执行时,判断执行成功或者失败,并加入不同的代码

1.demo6.php文件:

  1. <?php
  2. // *sql语句执行时,判断执行成功或者失败,并加入不同的代码
  3. namespace _221124f;
  4. use PDO;
  5. // *连接
  6. $db = new PDO('mysql:dbname=phpedu1', 'root', 'root');
  7. // *sql语句:CURD(增删改查):insert
  8. $sql="INSERT INTO staff(`name`,`sax`,`eamil`)VALUES(?,?,?)";
  9. // $sql = 'INSERT `staff` SET `name`= ?,`sex`= ?,`email`= ?;';
  10. // *对sql语句进行预处理
  11. $stmt=$db->prepare($sql);
  12. // *放入实参
  13. $data=['孙权',0,'sunquan@qq.com'];
  14. // *执行时,判断是否成功或失败:$stmt->execute($data) : true / false
  15. if ($stmt->execute($data)) {
  16. echo '新增成功, id = ' . $db->lastInsertId() . '<br>';
  17. } else {
  18. // *false
  19. echo 'sql执行失败';
  20. print_r($stmt->errorInfo());
  21. }

2.浏览器效果图:

题目7:利用rowCount()方法看写操作中的增删改是否成功与否

1.demo7.php文件:

  1. <?php
  2. // *利用rowCount()方法看写操作中的增删改是否成功与否
  3. namespace _221124g;
  4. use PDO;
  5. // *连接
  6. $db = new PDO('mysql:dbname=phpedu1', 'root', 'root');
  7. // *sql语句:CURD(增删改查):insert
  8. $sql="INSERT INTO staff(`name`,`sex`,`eamil`)VALUES(?,?,?)";
  9. // $sql = 'INSERT `staff` SET `name`= ?,`sex`= ?,`email`= ?;';
  10. // *对sql语句进行预处理
  11. $stmt=$db->prepare($sql);
  12. // *放入实参
  13. $data=['周瑜',0,'zouyu@qq.com'];
  14. // *执行时,判断是否成功或失败:$stmt->execute($data) : true / false
  15. if ($stmt->execute($data)) {
  16. if ($stmt->rowCount() > 0) {
  17. // *success
  18. echo '新增成功, id = ' . $db->lastInsertId() . '<br>';
  19. } else {
  20. // *fail
  21. echo '新增失败';
  22. print_r($stmt->errorInfo());
  23. }
  24. } else {
  25. // *false
  26. echo 'sql执行失败';
  27. print_r($stmt->errorInfo());
  28. }

2.浏览器效果图:

题目8:利用第1种方案对数据进行更新

1.demo8.php文件:

  1. <?php
  2. // *利用第1种方案对数据进行更新
  3. namespace _221124h;
  4. use PDO;
  5. // *连接
  6. $db = new PDO('mysql:dbname=phpedu1', 'root', 'root');
  7. // *sql语句:CURD(增删改查):update
  8. $sql="UPDATE `staff` SET `name`= ?,`sex`= ?,`eamil`= ? WHERE `id` = ?" ;
  9. // *特别提示:绝对禁止"无条件更新"
  10. // *检测一下sql语句中, 是否存在 where 子句
  11. // *strpos, stripos:忽略大小写
  12. if (false === stripos($sql, 'where')) {
  13. exit('禁止无条件更新');
  14. }
  15. // *对sql语句进行预处理
  16. $stmt = $db->prepare($sql);
  17. // *放入修改的实参
  18. $data = ['张艳丽', 1, 'zyl@qq.com', 5];
  19. // *执行sql
  20. if ($stmt->execute($data)) {
  21. if ($stmt->rowCount() > 0) {
  22. echo '成功的更新了 '.$stmt->rowCount() . '条记录~~';
  23. } else {
  24. // *主要用于检测是否重复执行
  25. echo '没有记录被更新';
  26. print_r($stmt->errorInfo());
  27. }
  28. } else {
  29. echo 'sql执行失败';
  30. print_r($stmt->errorInfo());
  31. }

2.浏览器效果图:

题目9:利用第1种方案对数据进行删除

1.demo9.php文件:

  1. <?php
  2. // *利用第1种方案对数据进行删除
  3. namespace _221124i;
  4. use PDO;
  5. // *连接
  6. $db = new PDO('mysql:dbname=phpedu1', 'root', 'root');
  7. // *sql语句:CURD(增删改查):delete
  8. $sql = "DELETE FROM `staff` WHERE `id` = ?";
  9. //* 特别提示:绝对禁止"无条件删除"
  10. if (false === stripos($sql, 'where')) {
  11. exit('禁止无条件删除');
  12. }
  13. // *对sql语句进行预处理
  14. $stmt = $db->prepare($sql);
  15. // *执行sql
  16. if ($stmt->execute([2])) {
  17. if ($stmt->rowCount() > 0) {
  18. echo '成功的删除了 '.$stmt->rowCount() . ' 条记录~~';
  19. } else {
  20. // 主要用于检测是否重复执行
  21. echo '没有记录被删除';
  22. print_r($stmt->errorInfo());
  23. }
  24. } else {
  25. echo 'sql执行失败';
  26. print_r($stmt->errorInfo());
  27. // $stmt->debugDumpParams();
  28. }

2.浏览器效果图:

题目10:预处理第5种方案:逐条获取fetch()

1.demo10.php文件:

  1. <?php
  2. // *预处理第5种方案:逐条获取fetch()
  3. namespace _221124j;
  4. use PDO;
  5. // *连接
  6. $db = new PDO('mysql:dbname=phpedu1', 'root', 'root');
  7. // *sql语句:CURD(增删改查):select
  8. $sql = "SELECT `id`,`name`,`eamil` FROM `staff`LIMIT ?";
  9. // *对sql语句进行预处理
  10. $stmt = $db->prepare($sql);
  11. // *数据指针位置从1开始:
  12. $index=1;
  13. // *数据指针下移的条数:
  14. $num=3;
  15. // *sql语句预处理绑定的参数
  16. $stmt->bindParam($index,$num,PDO::PARAM_INT);
  17. // *执行sql
  18. if ($stmt->execute()) {
  19. // *fetch(): 逐条获取,指针自动后移指向下一条, false / 记录
  20. //* PDO::FETCH_ASSOC: 只返回关联数组
  21. // *while循环
  22. while ($staff = $stmt->fetch(PDO::FETCH_ASSOC)) {
  23. printf('<pre>%s</pre>', print_r($staff, true));
  24. }
  25. } else {
  26. echo 'sql执行失败';
  27. print_r($stmt->errorInfo());
  28. }

2.浏览器效果图:

题目11:预处理第6种方案:全部获取fetchAll()

1.demo11.php文件:

  1. <?php
  2. // *预处理第6种方案:全部获取fetchAll()
  3. namespace _221124k;
  4. use PDO;
  5. // *连接
  6. $db = new PDO('mysql:dbname=phpedu1', 'root', 'root');
  7. // *sql语句:CURD(增删改查):select
  8. $sql = "SELECT `id`,`name`,`eamil` FROM `staff`LIMIT ?";
  9. // *对sql语句进行预处理
  10. $stmt = $db->prepare($sql);
  11. // *数据指针位置从1开始:
  12. $index=1;
  13. // *数据指针下移的条数:
  14. $num=4;
  15. // *sql语句预处理绑定的参数
  16. $stmt->bindParam($index,$num,PDO::PARAM_INT);
  17. // *执行sql
  18. if ($stmt->execute()) {
  19. // *fetchAll(): 获取全部满足条件的记录
  20. $staffs = $stmt->fetchAll(PDO::FETCH_ASSOC);
  21. // *foreach()(把二维数组作为一维数组逐个进行遍历,然后逐个进行打印)
  22. foreach ($staffs as $staff) {
  23. printf('<pre>%s</pre>', print_r($staff, true));
  24. }
  25. } else {
  26. echo 'sql执行失败';
  27. print_r($stmt->errorInfo());
  28. }

2.浏览器效果图:

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