博客列表 >数据库连接操作和增删改查等sql语句的使用

数据库连接操作和增删改查等sql语句的使用

Dong.
Dong.原创
2020年09月01日 15:55:25899浏览

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连接数据库感觉代码更加简洁
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议