批改状态:未批改
老师批语:
大家好:
以下是MySQLi面向对象实现更新操作 和 PDO实现删除操作的练习,如有错误望大家指出,谢谢
<?php
//1.连接参数
$db_host = 'localhost';
$db_user = 'root';
$db_pass = 'root';
$db_name = 'php';
$db_charset = 'utf8';
//2.连接数据库服务器,并返回mysqli对象
$mysqli = @new mysqli($db_host,$db_user,$db_pass);
//3.检测是否连接成功
if ($mysqli->connect_errno) {
exit('连接错误'.$mysqli->connect_errno.':'.$mysqli->connect_error);
}
//4.设置默认数据库
$mysqli->select_db($db_name);
//5.设置客户端默认字符编码集
$mysqli->set_charset($db_charset);
//面向对象使用预处理进行更新操作
//准备SQL语句
$sql = "UPDATE staff SET salary = ? WHERE staff_id = ?;";
//创建STMT预处理对象
$stmt = $mysqli->stmt_init();
//检测预处理SQL语句
if ($stmt->prepare($sql)) {
//绑定参数到预处理SQL语句
$stmt->bind_param('ii',$salary,$staff_id);
//设置参数
$salary = 5000;
$staff_id = 12;
//执行预处理语句
$stmt->execute();
if ($stmt->affected_rows > 0 ){
echo '<br>成功更新'.$stmt->affected_rows.'条记录';
} else {
echo '<br>没有更新记录';
}
//注销stmt对象
$stmt->close();
} else {
exit($stmt->errno.':'.$stmt->error);
}
//关闭数据库连接
$mysqli->close();点击 "运行实例" 按钮查看在线实例
<?php
//1.配置参数
/**
* DNS:数据源
* 基本格式: 数据库类型:属性1:值1; 属性2:值2;...
* 类型:如mysqli,oracle等
* 属性: 主机,默认数据库,默认字符集,默认端口号
* 例如: mysql:host=127.0.0.1;dbname=php;charset=utf8;port=3306;
*/
$dsn = 'mysql:host=localhost; dbname=php; charset=utf8; port=3306';
//数据库用户名
$userName = 'root';
//数据库用户密码
$password = 'root';
//配置连接属性
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, //设置错误模式
PDO::ATTR_CASE => PDO::CASE_NATURAL, //数据表字段保持不变
PDO::ATTR_EMULATE_PREPARES => true, //启用PDO模拟
PDO::ATTR_PERSISTENT => true, //启用持久性连接
];
//使用try-catch()来捕获可能发生的错误
try {
//调用PDO构造函数实例化PDO类,创建PDO对象
$pdo = new PDO($dsn, $userName, $password, $options);
//连接是所有操作的基础,无论你设置的错误模式级别是什么,都会强制使用EXCEPTION异常模式
} catch (PDOException $e) {
print 'Connect ERROR!:'.$e->getMessage(); //推荐使用英文提示,以防止页面中文乱码
die(); //连接错误是致命错误,必须停止脚本的执行
}
// PDO实现删除操作
//准备sql语句
$sql = "DELETE FROM staff WHERE staff_id=:staff_id";
//创建预处理对象stmt对象
if($stmt = $pdo->prepare($sql)) {
//将参数绑定到stmt对象并执行
//准备参数
$param = ['staff_id'=>5];
//绑定参数到SQL语句对象并执行
if ($stmt -> execute($param)){
//rowCount()返回删除的数量
if ($stmt->rowCount()>0) {
echo '成功删除了'.$stmt->rowCount().'条记录';
} else { //等于0表示没有记录被删除
echo '没有记录被删除';
}
} else { //执行失败的信息
print_r($stmt->errorInfo());
exit();
}
} else { //$stmt语句对象创建失败
print_r($pdo->errorInfo());
exit();
}
//销毁PDO对象
$pdo = null;点击 "运行实例" 按钮查看在线实例
课程总结
1.了解面向对象的curd操作的基本流程
2.了解绑定参数到预处理SQL语句的方法 — $stmt->bind_param()
3.了解PDO操作的数据库的基本流程
4.学习使用try-catch()来捕获可能发生的错误的方法
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号