Blogger Information
Blog 46
fans 2
comment 0
visits 19147
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
实例演示常用 的CURD操作,特别是各种常用组合,
P粉314265155
Original
301 people have browsed it

数据库连接

  1. <?php
  2. namespace pdo_edu;
  3. use PDO;
  4. // 1、读操作 select
  5. //2、 写操作 insert update delete
  6. // DURD 增删改查
  7. // 三步走
  8. // 1、连接数据库
  9. // 2、执行操作 DURD 增删改查
  10. // 3、关闭;连接
  11. // 1、连接数据库
  12. $dsn = 'mysql:host:localhost;dbname=bittel;port:3306;charset=utf8';
  13. $username = 'root';
  14. $password = 'root';
  15. $db = new PDO( $dsn,$username,$password );
  16. // 打印确认是否连接成功
  17. var_dump($db);
  18. // 2、执行操作 DURD 增删改查
  19. // UNSIGINED 无符号 只能正数
  20. // PRIMARY 主键
  21. // CHAR 固定的宽度
  22. // VARCHAR 可变的宽度
  23. // TINYINT 较小的整数
  24. // innoDB支持杭锁 列所 支持全文检索 论坛 强互动的 主流
  25. // MySAM 查询速度超快 文章系统去查询
  26. // CREATE TABLE `bittel`.`staff` ( `id` INT UNSIGNED NOT NULL COMMENT '主键' ,
  27. // `name` VARCHAR(30) NOT NULL COMMENT '姓名' , `sex` TINYINT(1) NOT NULL
  28. // DEFAULT '1' COMMENT '性别1是女 0是男' , `email` VARCHAR(100) NOT NULL COMMENT '邮箱' ) ENGINE = InnoDB;
  29. // 3、关闭;连接(可选,建议写)
  30. // 销毁连接对象
  31. // $db =null; 或
  32. // unset($db)

数据库插入-1

  1. <?php
  2. namespace pdo_edu;
  3. use PDO;
  4. use ValueError;
  5. // 插入
  6. // 三步走
  7. // 1、连接数据库
  8. // 2、执行操作 DURD 增删改查
  9. // 3、关闭;连接
  10. // 1、连接数据库
  11. require __DIR__.'/config/connect.php';
  12. // 打印确认是否连接成功
  13. var_dump($db);
  14. echo '<hr>';
  15. // 2、执行操作 DURD 增删改查
  16. // 新增
  17. // 列表1
  18. // INSERT INFO 表明 ( 字段名1,字段名2,。。。) VALUES ( 值1,值2,值3)
  19. // 简化
  20. // INSERT 表名 ( 字段名1,字段名2,。。。) VALUES ( 值1,值2,值3)
  21. // 如果mysql 且单条 还可以简化 建议
  22. // INSERT 表名 SET 字段名1=值1,字段名2=值2,。。。
  23. // 查询
  24. // SELECT * FROM `staff` WHERE `id`
  25. // 1、SQL 关键字全部大写
  26. // 2、 表名、字段名必须加 反引号 防和关键字冲突
  27. // 主键不能写
  28. // $sql = 'INSERT `staff` SET `id`';
  29. $sql = "INSERT `staff` SET `name`='admin',`sex`=1,`email`='123@qq.com'";
  30. // 创建 sql 语句对象
  31. // 方式一
  32. // new PDOSlatement
  33. // 方式二 推荐 准备阶段
  34. $stmt = $db -> prepare($sql);
  35. // 打印确认
  36. // var_dump( $stmt);
  37. // 执行sql
  38. if ($stmt->execute()){
  39. echo '插入成功';
  40. }
  41. // 3、关闭;连接(可选,建议写)
  42. // 销毁连接对象
  43. // $db =null; 或
  44. // unset($db)

数据库插入-2

  1. <?php
  2. // pdo 预处理
  3. // 预处理的本质:sql 语句 中的数据,是动态绑定的
  4. // 动态绑定:只有在执行sql时,才绑定真实的数据
  5. // 静态绑定:数据直接写到sql中
  6. // 1、静态 select * from staff where id >10
  7. // 2、动态(预处理):select * from staff where id >?
  8. // 1、匿名参数 ? +索引数组 [ ]
  9. namespace pdo_edu;
  10. use PDO;
  11. // 连接
  12. $db = new PDO('mysql:dbname=bittel','root','root');
  13. // CURD :INSERT 插入
  14. // $sql ='INSERT `staff` set `name`="admin", `sex`=1,`email`="123@qq.cpom"';
  15. $sql ='INSERT `staff` SET `id`=?,name`=?, `sex`=?,`email`=?;';
  16. // sql 对象语句 ——> sql 语句 模板对象 ——> 预处理对象
  17. // 执行完会产生一个对象 惯例
  18. $stmt =$db->prepare($sql);
  19. // sql 语句中的占位符 ? ,给他绑定真实数据 绑定关系必须是一 一对应
  20. $data = [22,'小狗',0,'123@qq.com'];
  21. // 执行 sql 的方法
  22. $stmt->execute($data);
  23. // echo $stmt;
  24. echo '<hr>';
  25. // print_r($stmt);
  26. //验证:打印的sql预处理命令 调试常用的方法
  27. // $stmt->debugDumpParams();
  28. // 输出
  29. echo '新增成功,id='.$db->lastInsertId().'<hr>';

数据库插入-3

  1. <?php
  2. // pdo: 预处理
  3. // 预处理的本质: sql语句中的数据,是动态绑定
  4. // 动态绑定: 只有在执行sql时,才绑定真实的数据
  5. // 静态绑定: 数据直接写到sql中
  6. // 1. 静态: select * from staff where id > 10
  7. // 2. 动态(预处理): select * from staff where id > ?
  8. // 2、命名参数 + 关联数组
  9. namespace pdo_edu;
  10. use PDO;
  11. // 连接
  12. $db = new PDO('mysql:dbname=bittel', 'root', 'root');
  13. // CURD: INSERT
  14. // 匿名参数: ?
  15. $sql = 'INSERT `staff` SET `name`=:name,`sex`=:sex,`email`=:email;';
  16. // sql语句->sql语句模板对象->预处理对象
  17. $stmt = $db->prepare($sql);
  18. // 关联数组
  19. // $data = [':name'=>'小猫',':sex'=>'0',':email'=>'456@qq.com',];
  20. // 简写 数据来源不写死
  21. $data = ['name'=>'小猫','sex'=>'0','email'=>'456@qq.com',];
  22. // 执行sql
  23. // $stmt->execute($data);
  24. // var_dump( $stmt->execute($data));
  25. if($stmt->execute($data)){
  26. echo '新增成功ID:'.$db->lastInsertId();
  27. }else{
  28. echo '执行失败';
  29. $stmt->debugDumpParams();
  30. print_r($stmt->errorInfo());
  31. }
  32. // 验证: 打印sql预处理命令
  33. // echo '新增成功, id = ' . $db->lastInsertId() . '<br>';
  34. // 用哪个?
  35. // 1. ? : 代码少, 结合上下文才知道语义
  36. // 2. ":name": 语义化,可读性
  37. // 我用第一个: ?
  38. //

参数绑定-值绑定

  1. <?php
  2. // 3 参数绑定: 值绑定 bindValue()
  3. /**
  4. * 为什么要单独设置参数,而不是在execute()时传参?
  5. * 1. execute()默认参数都是字符类型
  6. * 2. 通常数字型字符写入数据表时,会转换成正确类型,并不会有问题
  7. * 3. 但是在分页操作时,会导致错误
  8. * 4. 所在,在参数绑定时, 强制类型限制,就很有必要
  9. */
  10. namespace pdo_edu;
  11. use PDO ;
  12. // 连接
  13. $db = new PDO( 'mysql:dbname=bittel','root','root');
  14. // $sql = 'INSERT `staff` SET `name`=?,`sex`=?,`email`=?;';
  15. // $stmt = $db->prepare($sql);
  16. // 太长的语法 用 heredoc 语法
  17. // CURD: INSERT
  18. // $sql = 'INSERT `staff` SET `name`= ?,`sex`= ?,`email`= ?;';
  19. $sql = <<< SQL
  20. INSERT `staff`
  21. SET `name`= ?,`sex`= ?,`email`= ?;
  22. SQL;
  23. // $stmt = $db->prepare($sql);
  24. $stmt = $db->prepare($sql);
  25. // bindValue( ) 值绑定,静态绑定,所以参数必须要 有一个确定的值
  26. // bindValue(key,value,type(默认字符串),size): 匿名占位符 ,索引是从1开始的
  27. // $stmt->bindValue(1, '悟空', PDO::PARAM_STR);
  28. // $stmt->bindValue(2, 1, PDO::PARAM_INT);
  29. // $stmt->bindValue(3, 'wukong@qq.com', PDO::PARAM_STR);
  30. // 一 一 绑定 // 达不到 给出不数据自动更新
  31. // list($name,$sex,$email)=['小牛',0,'901@qq.com'];
  32. // $stmt->bindValue(1, $name, PDO::PARAM_STR);
  33. // $stmt->bindValue(2, $sex, PDO::PARAM_INT);
  34. // $stmt->bindValue(3, $email, PDO::PARAM_STR);
  35. // list($name,$sex,$email)=['小龙',0,'901@qq.com'];
  36. // $stmt->bindValue(1, $name, PDO::PARAM_STR);
  37. // $stmt->bindValue(2, $sex, PDO::PARAM_INT);
  38. // $stmt->bindValue(3, $email, PDO::PARAM_STR);
  39. // 执行sql
  40. $stmt->execute();
  41. echo '新增成功, id = ' . $db->lastInsertId() . '<br>';
  42. // print_r($stmt->execute());
  43. // if($stmt->execute()){
  44. // echo '新增成功,id='.$db->lastInsertId();
  45. // }else{echo'执行失败';}

参数绑定-引用绑定

  1. <?php
  2. // 3 参数绑定: 引用绑定 -动态绑定 绑定的别名 bindValue()
  3. /**
  4. * 为什么要单独设置参数,而不是在execute()时传参?
  5. * 1. execute()默认参数都是字符类型
  6. * 2. 通常数字型字符写入数据表时,会转换成正确类型,并不会有问题
  7. * 3. 但是在分页操作时,会导致错误
  8. * 4. 所在,在参数绑定时, 强制类型限制,就很有必要
  9. */
  10. namespace pdo_edu;
  11. use PDO ;
  12. // 连接
  13. $db = new PDO( 'mysql:dbname=bittel','root','root');
  14. $sql = <<< SQL
  15. INSERT `staff`
  16. SET `name`= ?,`sex`= ?,`email`= ?;
  17. SQL;
  18. // $sql = 'INSERT `staff` SET `name`=?,`sex`=?,`email`=?;';
  19. $stmt = $db->prepare($sql);
  20. // print_r($stmt);
  21. // 引用绑定: 动态绑定,绑定的不是数据本身,而它的地址/引用/别名
  22. $stmt->bindParam(1,$name,PDO::PARAM_STR);
  23. $stmt->bindParam(2,$sex,PDO::PARAM_INT);
  24. $stmt->bindParam(3,$email,PDO::PARAM_STR);
  25. list($name,$sex,$email) = ['小马',0,'123@qqq.com'];
  26. // 新增一条 覆盖上面一条 模板更新 $stmt->bindParam(1,$name,PDO::PARAM_STR);
  27. list($name,$sex,$email) = ['小猴',0,'123@qqq.com'];
  28. // 执行sql
  29. if ($stmt->execute()) {
  30. echo '新增成功, id = ' . $db->lastInsertId() . '<br>';
  31. }else{echo '执行失败';}
  32. // 引用绑定 ,优势大、用途,sql模板对象 只需要编译一遍,
  33. // 以后只要传入不同数据,就可以执行不同的操作了、
  34. // 以后建议只用 引用绑定

参数绑定-引用绑定-别名绑定

  1. <?php
  2. // 3 参数绑定: 引用绑定 -动态绑定 绑定的别名 bindValue()
  3. // 同时插入多条数据 zuoye6 每次直插入一条数据
  4. /**
  5. * 为什么要单独设置参数,而不是在execute()时传参?
  6. * 1. execute()默认参数都是字符类型
  7. * 2. 通常数字型字符写入数据表时,会转换成正确类型,并不会有问题
  8. * 3. 但是在分页操作时,会导致错误
  9. * 4. 所在,在参数绑定时, 强制类型限制,就很有必要
  10. */
  11. namespace pdo_edu;
  12. use PDO ;
  13. // 连接
  14. $db = new PDO( 'mysql:dbname=bittel','root','root');
  15. $sql = <<< SQL
  16. INSERT `staff`
  17. SET `name`= ?,`sex`= ?,`email`= ?;
  18. SQL;
  19. // $sql = 'INSERT `staff` SET `name`=?,`sex`=?,`email`=?;';
  20. $stmt = $db->prepare($sql);
  21. // print_r($stmt);
  22. // 引用绑定: 动态绑定,绑定的不是数据本身,而它的地址/引用/别名
  23. $stmt->bindParam(1,$name,PDO::PARAM_STR);
  24. $stmt->bindParam(2,$sex,PDO::PARAM_INT);
  25. $stmt->bindParam(3,$email,PDO::PARAM_STR);
  26. // 准备多条数据 使用二维数组来模拟
  27. $data = [
  28. ['小蛇',1,'123@qq.com'],
  29. ['小龙',0,'456@qq.com'],
  30. ['小黑',1,'789@qq.com'],
  31. ];
  32. // 使用 foreach 循环 来获取每组数据 ,然后使用 list() 进行解构获取每组数据的值
  33. foreach($data as list($name,$sex,$email) ){
  34. // 然后每组数据进行执行 数据库插入操作
  35. // 执行sql
  36. $stmt->execute();
  37. echo '新增成功, id = ' . $db->lastInsertId() . '<br>';
  38. }
  39. // 执行sql
  40. // if ($stmt->execute()) {
  41. // echo '新增成功, id = ' . $db->lastInsertId() . '<br>';
  42. // }else{echo '执行失败';}
  43. // 引用绑定 ,优势大、用途,sql模板对象 只需要编译一遍,
  44. // 以后只要传入不同数据,就可以执行不同的操作了、
  45. // 以后建议只用 引用绑定

参数绑定-引用绑定-

  1. <?php
  2. // 3 参数绑定: 引用绑定 -动态绑定 绑定的别名 bindValue()
  3. // 同时插入多条数据 zuoye6 每次直插入一条数据
  4. // 检测数据是否插入成功、
  5. /**
  6. * 为什么要单独设置参数,而不是在execute()时传参?
  7. * 1. execute()默认参数都是字符类型
  8. * 2. 通常数字型字符写入数据表时,会转换成正确类型,并不会有问题
  9. * 3. 但是在分页操作时,会导致错误
  10. * 4. 所在,在参数绑定时, 强制类型限制,就很有必要
  11. */
  12. namespace pdo_edu;
  13. use PDO ;
  14. // 连接
  15. $db = new PDO( 'mysql:dbname=bittel','root','root');
  16. $sql = <<< SQL
  17. INSERT `staff`
  18. SET `name`= ?,`sex`= ?,`email`= ?;
  19. SQL;
  20. // $sql = 'INSERT `staff` SET `name`=?,`sex`=?,`email`=?;';
  21. $stmt = $db->prepare($sql);
  22. $data = ['小鸡',1,'123@qq.com'];
  23. // 然后每组数据进行执行 数据库插入操作
  24. // 读:select
  25. // 写 :insert updata delete 成功后 会返回 表中受影响的记录数据量
  26. // rowCount()返回受影响的记录数量 判断是否新增成功
  27. // 执行sql
  28. // $stmt->execute($data)? true :false;
  29. if ($stmt->execute($data)) {
  30. if($stmt->rowCount() >0){
  31. echo '新增成功, id = ' . $db->lastInsertId() . '<br>';
  32. }else{
  33. echo '新增失败';
  34. }
  35. }else{
  36. echo 'sql执行失败';
  37. print_r( $stmt->errorInfo());
  38. }
  39. // 引用绑定 ,优势大、用途,sql模板对象 只需要编译一遍,
  40. // 以后只要传入不同数据,就可以执行不同的操作了、
  41. // 以后建议只用 引用绑定
  42. /**背下来
  43. * tips:
  44. * 1. else : 应该用于开发调试阶段, 生产环境中应该将错误信息集中写到日志文件中
  45. * 2. sql执行失败很常见,通常是语法错误,例如字段name写成了name1
  46. * 3. 新增失败通常是权限不足,如没有插入权限或当前表被锁定只读等,也可能是磁盘空间满了
  47. */

数据库更新

  1. <?php
  2. // 更新操作
  3. namespace pdo_edu;
  4. use PDO ;
  5. // 连接
  6. $db = new PDO( 'mysql:dbname=bittel','root','root');
  7. // 更新操作 UPDATA -- 更新条件 必写
  8. $sql = <<< SQL
  9. UPDATE `staff`
  10. SET `name`= ?,`sex`= ?,`email`= ?
  11. WHERE `id`=?;
  12. SQL;
  13. // 绝对禁止无条件更新,不然所有数据都会更新 必须要检测 sql语句是否存在where子句
  14. // strpos ,stripos 忽略大小写
  15. if(false ===stripos($sql,'where')){
  16. // 执行结束当前脚本 不会越过此条语句
  17. exit('禁止无条件更新');
  18. }
  19. // $sql = 'INSERT `staff` SET `name`=?,`sex`=?,`email`=?;';
  20. $stmt = $db->prepare($sql);
  21. $data = ['小红',1,'090@qq.com',33];
  22. if($stmt->execute($data)){
  23. if($stmt->rowCount()>0){
  24. echo '更新成功记录,数量:'.$stmt->rowCount();
  25. }else{
  26. // 主要用于检测是否重复执行 再次执行时就会执行到这儿
  27. echo '更新失败';
  28. print_r($stmt->errorInfo());
  29. }
  30. }else{
  31. echo 'sql执行失败';
  32. print_r($stmt->errorInfo());
  33. }

数据库删除操作

  1. <?php
  2. // 删除操作
  3. namespace pdo_edu;
  4. use PDO ;
  5. // 连接
  6. $db = new PDO( 'mysql:dbname=bittel','root','root');
  7. // 删除操作 DELETE FROM -- 更新条件 必写
  8. // $sql = 'DELETE FROM `staff` WHERE `id`=?;';
  9. $sql = 'DELETE FROM `staff` WHERE `id` = ?;';
  10. // 绝对禁止无条件更新,不然所有数据都会更新 必须要检测 sql语句是否存在where子句
  11. // strpos ,stripos 忽略大小写
  12. if(false ===stripos($sql,'where')){
  13. // 执行结束当前脚本 不会越过此条语句
  14. exit('禁止无条件删除');
  15. }
  16. // $sql = 'INSERT `staff` SET `name`=?,`sex`=?,`email`=?;';
  17. $stmt = $db->prepare($sql);
  18. $data = [34];
  19. if($stmt->execute($data)){
  20. if($stmt->rowCount()>0){
  21. echo '删除成功记录,数量:'.$stmt->rowCount();
  22. }else{
  23. // 主要用于检测是否重复执行 再次执行时就会执行到这儿
  24. echo '删除失败';
  25. print_r($stmt->errorInfo());
  26. }
  27. }else{
  28. echo 'sql执行失败';
  29. print_r($stmt->errorInfo());
  30. }

数据库查询操作 fetch+while·

  1. <?php
  2. // 查询操作 fetch() + while()
  3. namespace pdo_edu;
  4. use PDO ;
  5. // 连接
  6. $db = new PDO( 'mysql:dbname=bittel','root','root');
  7. // 查询 select
  8. $sql = 'SELECT `id`,`name`,`email` FROM `staff` LIMIT ?;';
  9. $stmt = $db->prepare($sql);
  10. // 执行sqL
  11. // if($stmt->execute(5)){ 不能直接写数据 因为写数字就变成了 字符串,无法执行应该是个数值
  12. // 因此需要变更下数据类型
  13. // $num =5;
  14. // $stmt->bindParam(1,$num,PDO::PARAM_INT);
  15. // 简化 因为查询条件是一个 所以值绑定合适
  16. $stmt->bindValue(1,5,PDO::PARAM_INT);
  17. if($stmt->execute()){
  18. echo '查询成功记录,数量:';
  19. $stmt->debugDumpParams();
  20. // 使用 fetch()逐条 获取,指针自动后移指向下一条
  21. // 获取模式的过滤器: PDO::FETCH_ASSOC 只返回关联部分数组
  22. // $staff = $stmt->fetch();
  23. // 第一个
  24. // $staff = $stmt->fetch(PDO::FETCH_ASSOC);
  25. // if($staff){
  26. // printf('<pre>%s<pre>',print_r( $staff,true));
  27. // }else{
  28. // echo '没有了';
  29. // }
  30. // 第二个 依次查询,可以使用while 循环
  31. // $staff = $stmt->fetch(PDO::FETCH_ASSOC);
  32. // if($staff){
  33. // printf('<pre>%s<pre>',print_r( $staff,true));
  34. // }else{
  35. // echo '没有了';
  36. // }
  37. while( $staff = $stmt->fetch(PDO::FETCH_ASSOC)){
  38. printf('<pre>%s<pre>',print_r( $staff,true));
  39. }
  40. }else{
  41. echo 'sql执行失败';
  42. print_r($stmt->errorInfo());
  43. }

数据库查询操作 fetchALL() + foreach()

  1. <?php
  2. // 查询操作 fetchALL() + foreach()
  3. namespace pdo_edu;
  4. use PDO ;
  5. // 连接
  6. $db = new PDO( 'mysql:dbname=bittel','root','root');
  7. // 查询 select
  8. $sql = 'SELECT `id`,`name`,`email` FROM `staff` LIMIT ?;';
  9. $stmt = $db->prepare($sql);
  10. // 执行sqL
  11. // if($stmt->execute(5)){ 不能直接写数据 因为写数字就变成了 字符串,无法执行应该是个数值
  12. // 因此需要变更下数据类型
  13. // $num =5;
  14. // $stmt->bindParam(1,$num,PDO::PARAM_INT);
  15. // 简化 因为查询条件是一个 所以值绑定合适
  16. $stmt->bindValue(1,5,PDO::PARAM_INT);
  17. if($stmt->execute()){
  18. $staffs =$stmt->fetchAll(PDO::FETCH_ASSOC);
  19. // 二维数组打印
  20. print_r($staffs).'<br>';
  21. echo '<hr>';
  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. }
Correcting teacher:PHPzPHPz

Correction status:qualified

Teacher's comments:// 2、执行操作 DURD 增删改查 几处地方改一下
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
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!