批改状态:合格
老师批语:pdo操作是目前 的主流
| 序号 | 步骤 | 描述 |
|---|---|---|
| 1 | 连接数据库 | 创建$mysql或者$pdo对象 |
| 2 | 操作数据表 | 对数据库中数据增(INSERT)、删(DELETE)、查(SELECT)、改(UPDATE)操作 |
| 3 | 关闭数据库连接 | 也就是销毁数据库对象 |
操作数据表主要分为读和写
| 序号 | 参数 | 描述 |
|---|---|---|
| 1 | type | 数据库类型 |
| 2 | host | 数据库主机名 |
| 3 | dbname | 数据库名 |
| 4 | username | 用户名 |
| 5 | password | 用户密码 |
| 6 | charset | 默认编码集 |
| 7 | port | 默认端口号 |
<?php// 数据库类型define('DB_TYPE', 'mysql');// 数据库主机名define('DB_HOST', 'localhost');// 数据库名define('DB_NAME', 'user');// 数据库用户名define('DB_USER', 'root');// 数据库密码define('DB_PSD', 'root');// 数据库默认端口号define('DB_PORT', 3306);// 数据库编码集define('DB_CHARSET', 'utf8');// 定义pdo中dsn的主机名,数据库型号,数据库名和编码方式define('DB_DSN', DB_TYPE . ':host=' . DB_HOST . ';dbname=' . DB_NAME . ';charset=' . DB_CHARSET);
<?php// 引入配置文件require __DIR__ . "/config.php";// 1.连接数据库$mysql = new mysqli(DB_HOST, DB_USER, DB_PSD, DB_NAME);// 检测错误if ($mysql->connect_errno) die('Connect_errno:' . $mysql->connect_error);// 设置编码集$mysql->set_charset(DB_CHARSET);
<?php// 新增操作(插入)用预处理方式$sql = 'INSERT `apple` SET `username`=? ,`password`=?, `sex`=?';// 准备执行(转为statement对象)$stmt = $mysql->prepare($sql);// 绑定占位符$stmt->bind_param('sss', $username, $password, $sex);// 变量赋值$username = '小孔';$password = sha1(123);$sex = '男';// 执行$stmt->execute();// 返回受影响的行数printf('新增了 %s 条记录,新增的id为 %d', $stmt->affected_rows, $stmt->insert_id);// 也可以通过遍历一个二维数组实现一次性插入多条数据$as = [['username' => '小小', 'password' => sha1(123), 'sex' => '男'],['username' => '小康', 'password' => sha1(222), 'sex' => '女'],['username' => '小于', 'password' => sha1(333), 'sex' => '女'],['username' => '小文', 'password' => sha1(444), 'sex' => '男'],['username' => '小群', 'password' => sha1(555), 'sex' => '男'],];// 遍历数组foreach ($as as $a) {// 展开数组extract($a);// 判断是否执行成功if ($stmt->execute()) {printf('新增了 %s 条数据,新增的id为 %d<br>', $stmt->affected_rows, $stmt->insert_id);} else {exit(sprintf('新增失败,%d:%s', $stmt->connect_errno, $stmt->connect_error));}}

<?php// 更新操作$sql = "UPDATE `apple` SET `username`=?, `password`=?, `sex`=? WHERE `id`=?";// 准备执行(转为statement对象)$stmt = $mysql->prepare($sql);// 绑定占位符$stmt->bind_param('sssi', $username, $password, $sex, $id);$a = ['username' => '小卡', 'password' => sha1(111), 'sex' => '女', 'id' => 25];// 展开数组extract($a);if ($stmt->execute()) {printf('更新成功,更新了 %s 条数据', $stmt->affected_rows);} else {exit(sprintf('更新失败,%d:%s', $stmt->connect_errno, $stmt->connect_error));}

<?php// 删除操作$sql = "DELETE FROM `apple` WHERE `id`=?";// 准备执行(转为statement对象)$stmt = $mysql->prepare($sql);// 绑定占位符$stmt->bind_param('i', $id);$id = 5;// 执行if ($stmt->execute()) {printf('删除成功,删除了 %s 条数据', $stmt->affected_rows);} else {exit(sprintf('删除失败,%d:%s', $stmt->connect_errno, $stmt->connect_error));}

<?php$sql = "SELECT * FROM `apple` WHERE `id`>?";// 准备执行(转为statement对象)$stmt = $mysql->prepare($sql);// 绑定占位符$stmt->bind_param('i', $id);$id = 20;// 执行$stmt->execute();if ($stmt->affected_rows === 0) exit('查询失败');// 获取结果集$res = $stmt->get_result();打印结果集print_r($res->fetch_assoc());print_r($res->fetch_assoc());// 遍历结果// 1.fetch_assoc()+while()获取结果集while ($a = $res->fetch_assoc()) {printf('id= %d 姓名= %s 性别= %s <br>', $a['id'], $a['username'], $a['sex']);}// 2.fetch_all()+foreach()获取结果集foreach ($res->fetch_all(MYSQLI_ASSOC) as $a) {printf('序号= %d:姓名= %s 性别= %s<br>', $a['id'], $a['username'], $a['sex']);}// 3.bind_result()+fetch()+while()将结果集的字段与一个变量绑定$sql = "SELECT `id` , `username` , `sex` FROM `apple` WHERE `id`>? ";// 准备执行(转为statement对象)$stmt = $mysql->prepare($sql);$stmt->bind_param('i', $id);$id = 23;$stmt->execute() or die($stmt->error);// 将结果字段绑定到变量中(跳过了结果集)$stmt->bind_result($id, $name, $sex);// 用while()遍历while ($stmt->fetch()) {printf('序号= %d :姓名= %s 性别= %s <br>', $id, $name, $sex);}
fetch_assoc()+while()获取结果集

2.fetch_all()+foreach()获取结果集

3.bind_result()+fetch()+while()将结果集的字段与一个变量绑定

<?php$mysql->close();
<?php// 引入配置文件require __DIR__ . '/config.php';// 连接数据库try {$pdo = new PDO(DB_DSN, DB_USER, DB_PSD);} catch (PDOException $e) {echo $e->getMessage();}// 设置结果集默认默认获取模式$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
<?php// 新增(插入)操作$sql = "INSERT `apple` SET `username`=?, `password`=?, `sex`=?";// 准备执行$stmt = $pdo->prepare($sql);// 绑定占位符// PDO::PARAM_STR, 30 确认数据类型和字符位数$stmt->bindParam(1, $name, PDO::PARAM_STR, 30);$stmt->bindParam(2, $password, PDO::PARAM_STR, 40);$stmt->bindParam(3, $sex, PDO::PARAM_STR, 10);// 变量赋值$name = '小环';$password = sha1(222);$sex = '女';// bindValue()值绑定,变量的变化实时映射到占位符上,因此每一次都必须重新赋值// 值绑定可通过execute()实现if ($stmt->execute(['小话', sha1(333), '男'])) {// rowCount()获取受影响的行数// lastInsertId()获取主键idprintf('新增成功 %s 条数据,新增的主键id= %d', $stmt->rowCount(), $pdo->lastInsertId());}

值绑定

<?php// 更新操作$sql = "UPDATE `apple` SET `username`=?, `password`=?, `sex`=? WHERE `id`=?";// 准备执行$stmt = $pdo->prepare($sql);// 值绑定占位符if ($stmt->execute(['小星星', sha1(333), '男', 28])) {printf('更新成功 %s 条数据', $stmt->rowCount());}

<?php// 删除操作$sql = "DELETE FROM `apple` WHERE `id`=?";// 准备执行$stmt = $pdo->prepare($sql);// 值绑定占位符if ($stmt->execute([17])) {printf('删除成功 %s 条数据', $stmt->rowCount());}

<?php$sql = "SELECT `id`, `username`, `sex` FROM `apple` WHERE `id`>?";// 准备执行$stmt = $pdo->prepare($sql);// 值绑定占位符$stmt->execute([20]);// 1.通过fetch()+while()获取结果while ($a = $stmt->fetch()) {vprintf('<li>序号:%d,姓名= %s 性别= %s</li><br>', $a);}// 2.fetchAll()+foreach()获取结果foreach ($stmt->fetchAll() as $a) {vprintf('<li>序号:%d,姓名= %s 性别= %s</li><hr>', $a);}// 3.bindColumn()+fetch()+while()获取结果// 将获取结果的字段和变量绑定$stmt->bindColumn('id', $id);$stmt->bindColumn('username', $name);$stmt->bindColumn('sex', $sex);while ($stmt->fetch()) {printf('<li>序号:%d,姓名= %s 性别= %s</li><br>', $id, $name, $sex);}// 获取记录数量不要用rowCount()获取 用sql语句获取$sql = "SELECT COUNT(`id`) AS `num` FROM `apple` WHERE `id`>?";$stmt = $pdo->prepare($sql);$stmt->execute([20]);$stmt->bindColumn('num', $num);$stmt->fetch(PDO::FETCH_BOUND);printf('满足条件的记录数量:%d', $num);
1.通过fetch()+while()获取结果

2.fetchAll()+foreach()获取结果

3.bindColumn()+fetch()+while()获取结果

4.获取记录数量

1.对于mysqli对象和pdo的方法使用更清楚了
2.对于获取的结果集的多种方法有了更深的理解
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号