Blogger Information
Blog 40
fans 0
comment 1
visits 39769
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
数据库连接操作和增删改查等sql语句的使用
Dong.
Original
898 people have browsed it

1. mysql 连接数据库 以及增差改删等sql语句的使用

1.1 mysql连接数据库

1.1.1 设置数据库连接参数
  1. <?php
  2. //连接数据库参数
  3. return [
  4. //类型
  5. 'type' => $type ?? 'mysql',
  6. //默认数据库主机名
  7. 'host' => $host ?? 'loscalhost',
  8. //默认数据库ming
  9. 'dbname' => $type ?? 'php_edu',
  10. //默认用户名
  11. 'username' => $username ?? 'php.edu',
  12. //,默认用户密码
  13. 'password' => $password ?? '61187118',
  14. //默认字符编码集
  15. 'charset' => $type ?? 'utf8',
  16. //默认端口号
  17. 'port' => $type ?? '3306'
  18. ];
1.1.2 连接数据库
  1. <?php
  2. // 导入配置参数,数组
  3. $config = require __DIR__ . '/../config.php';
  4. // 关联数组 转为 独立变量
  5. extract($config);
  6. $mysqli = new mysqli($host, $username, $password, $dbname);
  7. // var_dump($mysqli);
  8. // 检测错误
  9. if ($mysqli->connect_errno) die('Connect Error: ' . $mysqli->connect_error);
  10. // 字符编码
  11. $mysqli->set_charset($charset);

1.2 mysql数据库插入数据(一次性插入多条数据)

  1. <?php
  2. // 1.连接
  3. require 'connect.php';
  4. // 2.操作
  5. // sql语句,?:匿名占位符
  6. $sql = 'INSERT `users` SET `name`=?, `email`=? , `password`=?;';
  7. // 第一步: 将sql语句转为sql语句对象: stmt对象,预处理对象, 预编译语句对象
  8. $stmt = $mysqli->prepare($sql);
  9. // 占位符? 绑定变量
  10. // 给占位符绑定一个变量名(变量标识符)
  11. $stmt->bind_param('sss', $name, $email, $password);
  12. // 一次性插入多条数据
  13. $users = [
  14. ['name' => '小燕子', 'email' => 'xyz@php.cn', 'password' => sha1('123456')],
  15. ['name' => '紫薇', 'email' => 'zw@php.cn', 'password' => sha1('123456')],
  16. ['name' => '五阿哥', 'email' => 'wag@php.cn', 'password' => sha1('123456')],
  17. ['name' => '尔康', 'email' => 'ek@php.cn', 'password' => sha1('123456')],
  18. ['name' => '金锁', 'email' => 'js@php.cn', 'password' => sha1('123456')],
  19. ];
  20. // user拆分变量,用execute执行
  21. foreach ($users as $user) {
  22. extract($user);
  23. if ($stmt->execute())
  24. printf('成功的新增了 %s 条记录, 新增主键ID = %d
  25. ', $stmt->affected_rows, $stmt->insert_id);
  26. else
  27. exit(sprintf('新增失败 , $d: %s', $stmt->errno, $stmt->error));
  28. }
  29. // 3.关闭
  30. $mysqli->close();

1.3 mysql数据库删除数据

  1. <?php
  2. require 'connect.php';
  3. $sql = 'DELETE FROM `users` WHERE `id` = ?;';
  4. $stmt = $mysqli->prepare($sql);
  5. $stmt->bind_param('i', $id);
  6. $id = 5;
  7. $stmt->execute();
  8. printf('删除了 %s 条记录', $stmt->affected_rows);
  9. $mysqli->close();
  10. //结果:删除了id=5的数据

1.4 mysql数据库查询数据

  1. <?php
  2. // mysqli的查询操作1:fetch_assoc()+while()
  3. // 1.连接
  4. require 'connect.php';
  5. // 2.操作
  6. $sql = 'SELECT * FROM `users` WHERE `id` > ?';
  7. // 对象
  8. $stmt = $mysqli->prepare($sql);
  9. // 绑定
  10. $stmt->bind_param('i', $id);
  11. $id = 10;
  12. // 执行
  13. $stmt->execute() or die($stmt->error);
  14. // 获取结果
  15. $result = $stmt->get_result();
  16. // 解析结果集
  17. if ($result->num_rows === 0) exit('结果为空');
  18. // mysqli的查询操作1:fetch_assoc()+while()
  19. // 因为可能有多条数据,重复查询操作,用循环来做,fetch_assoc()遍历
  20. while ($user = $result->fetch_assoc()) {
  21. vprintf('%d: %s | %s
  22. ', $user);
  23. }
  24. // mysqli的查询操作2:fetch_all()+foreach()
  25. // fetch_all()遍历二维数组,返回记录集合
  26. $user = $result->fetch_all(MYSQLI_ASSOC);
  27. foreach ($user as $user) {
  28. vprintf('%d: %s ###| %s
  29. ', $user);
  30. }
  31. // mysqli的查询操作3:bind_result()+fetch()+while()
  32. $stmt->execute() or die($stmt->error);
  33. // 方法:bind_result(),字段与变量绑定
  34. $stmt->bind_result($id, $name, $email);
  35. while ($stmt->fetch()) {
  36. printf('%d: %s ***| %s
  37. ', $id, $name, $email);
  38. }
  39. // 判断有多少条内容,用以下两行代码
  40. $stmt->store_result();
  41. if ($stmt->num_rows === 0) exit('没有内容');
  42. // 3.释放结果
  43. $result->free();
  44. // 4.关闭
  45. $mysqli->close();

1.5 mysql数据库更新数据

  1. <?php
  2. // mysqli的更新操作
  3. // 1.连接
  4. require 'connect.php';
  5. // 2.操作
  6. $sql = 'UPDATE `users` SET `name`=?, `email`= ?, `password`=? WHERE `id` = ?;';
  7. // 生成sql语句对象
  8. $stmt = $mysqli->prepare($sql);
  9. // 占位符与变量名绑定sssi
  10. $stmt->bind_param('sssi', $name, $email, $password, $id);
  11. // 变量赋值,把id为3和5的变量修改
  12. $user = ['name' => '小李子', 'email' => 'xlz@php.cn', 'password' => sha1('122'), 'id' => 5];
  13. $user = ['name' => '小飞', 'email' => 'xf@php.cn', 'password' => sha1('123'), 'id' => 3];
  14. // 展开独立变量,给sql语句中与占位符对应的变量赋值
  15. extract($user);
  16. // 执行更新
  17. $stmt->execute();
  18. printf('更新了 %s 条记录', $stmt->affected_rows);
  19. // 3.关闭
  20. $mysqli->close();

2. PDO 连接数据库 以及增差改删等sql语句的使用

2.1 PDO连接数据库

  1. $config = require __DIR__ . '/../config.php';
  2. extract($config);
  3. try {
  4. $dsn = sprintf('%s:host=%s;dbname=%s;charset=%s;port=%s', $type, $host, $dbname, $charset, $port);
  5. $pdo = new PDO($dsn, $username, $password);
  6. // 设置结果集的默认获取模式: 只关心关联数组部分
  7. $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
  8. } catch (PDOException $e) {
  9. exit('Connection Error: ' . $e->getMessage());
  10. }

2.2 PDO删除数据

  1. <?php
  2. // 1.连接
  3. require 'connect.php';
  4. // 2.操作
  5. $sql = 'DELETE FROM `users` WHERE `id` = ?;';
  6. // 生成sql语句对象
  7. $stmt = $pdo->prepare($sql);
  8. // 将值直接绑定到点位符?上
  9. $stmt->execute([27]);
  10. if ($stmt->rowCount() > 0) echo '删除成功 ' . $stmt->rowCount() . ' 条记录';
  11. // 3.关闭
  12. $pdo->null;

2.3 PDO插入数据

  1. <?php
  2. // pdo新增
  3. // 1.连接
  4. require 'connect.php';
  5. // 2.操作
  6. $sql = 'INSERT `users` SET `name`=?, `email`=? , `password`=?;';
  7. // 生成对象
  8. $stmt = $pdo->prepare($sql);
  9. // 简单方法:给execute()传参来简化执行
  10. $stmt->execute(['小芳', 'xf@php.cn', sha1('xf567')]);
  11. if ($stmt->rowCount() > 0) echo '新增成功 ' . $stmt->rowCount() . ' 条记录,主键id: ' . $pdo->lastInsertId();
  12. // 3.关闭
  13. // $pdo = null;
  14. unset($pdo);

2.4 PDO查询数据

  1. <?php
  2. // 1. 连接
  3. require 'connect.php';
  4. // 2. 操作
  5. $sql = 'SELECT `id`,`name`,`email` FROM `users` WHERE `id` >= ?;';
  6. $stmt = $pdo->prepare($sql);
  7. $stmt->execute([10]);
  8. // pdo查询操作1: fetch() + while()
  9. while ($user = $stmt->fetch()) {
  10. vprintf('
  11. %s: %s | %s
  12. ', $user);
  13. }
  14. // pdo查询操作2: fetchAll() + foreach()
  15. $users = $stmt->fetchAll();
  16. foreach ($users as $user) {
  17. vprintf('
  18. %s: %s ***| %s
  19. ', $user);
  20. }
  21. // pdo查询操作3: bindColumn() + fetch() + while()
  22. $stmt->bindColumn('id', $id);
  23. $stmt->bindColumn('name', $name);
  24. $stmt->bindColumn('email', $email);
  25. // 遍历
  26. while ($stmt->fetch(PDO::FETCH_BOUND)) {
  27. printf('
  28. %s: %s ##| %s
  29. ', $id, $name, $email);
  30. }
  31. // 获取数量个数
  32. $sql = 'SELECT COUNT(`id`) AS `count` FROM `users` WHERE `id` >= ?;';
  33. $stmt = $pdo->prepare($sql);
  34. // 将值直接绑定到匿名占位符?上面
  35. // id大于5的
  36. $stmt->execute([5]);
  37. $stmt->bindColumn('count', $count);
  38. $stmt->fetch(PDO::FETCH_BOUND);
  39. echo '满足条件的记录数量' . $count;
  40. // 3. 关闭
  41. $pdo = null;

2.5 PDO更新数据

  1. <?php
  2. require 'connect.php';
  3. $sql = 'UPDATE `users` SET `name`=?, `email`= ?, `password`=? WHERE `id` = ?;';
  4. $stmt = $pdo->prepare($sql);
  5. $stmt->execute(['小芳2', 'xf@php.cn', sha1('xf567'), 27]);
  6. if ($stmt->rowCount() > 0) echo '更新成功 ' . $stmt->rowCount() . ' 条记录';
  7. $pdo->null;

总结

  • PDO可以防止SQL注入,确保数据库更加安全
  • PDO连接数据库感觉代码更加简洁
Correcting teacher:天蓬老师天蓬老师

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