Blogger Information
Blog 49
fans 0
comment 3
visits 23029
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
实例演示CURD预处理的各种方案
P粉479712293
Original
589 people have browsed it

题目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.浏览器效果图:

Correcting teacher:PHPzPHPz

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post