Correcting teacher:灭绝师太
Correction status:qualified
Teacher's comments:
面向对象操作数据库步骤
mysqli对象的属性 | 作用 |
---|---|
$mysqli::connect_errno | 返回最后一次连接数据库的错误代码 |
$mysqli::connect_error | 返回最后一次连接数据库的错误描述,类型为字符串 |
$mysqli::connect_error | 返回最后一次连接数据库的错误描述,类型为字符串 |
$mysqli::errno | 返回最近一次函数调用所产生的错误代码 |
$mysqli::error | 返回最近一次错误代码的描述,类型是字符串 |
new mysqli('主机名','用户名','密码','要连接的数据库名');
例:
// @:错误抑制符
// 连接成功打印输出$mysqli是一个对象,失败返回fales
$mysqli = @new mysqli('localhost','root','root','test');
// 判断是否连接成功
if ($mysqli->connect_errno) {
// die();就是停止掉
// 停止程序运行,提示错误
die("CONNECT_ERROR:".$mysqli->connect_error);
}
$mysqli->set_charset('utf-8');
`添加数据sql语句`
INSERT INTO 表名 (字段名,字段名...) VALUES (对应值,对应值);
例:
INSERT INTO user (username,age) VALUES ('张三',21);
`删除语句:删除语句一定要加wher条件否则很惨`
DELETE FROM USER WHERE 条件;
例:
DELETE FROM USER WHERE ID=2;
`修改语句`
UPDATE 表名 SET `字段名`='修改的值',`字段名`='修改的值' WHERE 条件
例:
UPDATE USER SET `USERNAME`='李四',`age`='18' WHERE ID=1;
`查询语句`
SELECT * FROM 表名; // 查询该表所有数据
SELECT * FROM 表名 WHERE 条件; // 查询复合条件的数据
SELECT 字段,字段 FROM 表名 WHERE 条件; // 查询指定条件的指定字段数据
例:
SELECT * FROM USER;
删除/修改/添加语句执行成功后返回true;,执行失败返回false
查询语句执行成功返回mysqli_result 对象,失败返回false
// $sql就是承接的定义sql语句的变量
// 执行完使用一个变量来承接[$res就是承接的变量]
$res = $mysqli->query($sql);
这个类的对象包含SELECT查询的结果、获取结果集中数据的成员方法,以及和查询的结果有关的成员属性。
$mysqli::insert_id:返回上一次执行添加语句的id
mysqli_result对象中的属性 | 作用 |
---|---|
mysqli_result::fetch_all() | 抓取所有的结果行并且以关联数组,数值索引数组,或者两者皆有的方式返回结果集。fetch_all(MYSQLI_ASSOC/MYSQLI_NUM/ MYSQLI_BOTH) |
mysqli_result::fetch_array() | 以一个关联数组,数值索引数组,或者两者皆有的方式抓取一行结果 fetch_array(MYSQLI_ASSOC, MYSQLI_NUM, or MYSQLI_BOTH) |
mysqli_result::fetch_assoc() | 以一个关联数组方式抓取一行结果 |
mysqli_result::fetch_row() | 以一个枚举数组方式返回一行结果 |
$mysqli_result::num_rows | 获取结果中行的数量 |
例:
// 执行sql语句
$res = $mysqli->query($sql);
$res->mysqli_result::fetch_all(MYSQLI_ASSOC);
例:
$res->mysqli_result::fetch_array(MYSQLI_ASSOC);
例:
$res->mysqli_result::fetch_assoc();
例:
$res->mysqli_result::fetch_row();
例:
$res->$mysqli_result::num_rows;
例:
$res->mysqli_result::free();
mysqli_result::free():释放与一个结果集相关的内存
例:
// 执行sql语句
$res = $mysqli->query($sql);
// 释放结果集
$res->free():
mysqli::close();:关闭先前打开的数据库连接
// 这里的$mysqli就是承接连接数据库返回值的变量
$mysqli->close($mysqli);
// 实例
// 登录界面
<!DOCTYPE html>
<html>
<head>
<title>用户登录</title>
</head>
<body>
<h2>用户登录</h2>
<form action="actions.php" method="post">
<!-- <form action="action.php" method="post"> -->
<table>
<tr>
<td>用户名</td>
<td>
<input type="text" name="username">
</td>
</tr>
<tr>
<td>密码</td>
<td>
<input type="password" name="password">
</td>
</tr>
<tr align="center">
<td colspan="2">
<input type="submit" name="sub">
</td>
</tr>
</table>
</form>
</body>
</html>
//数据处理文件
<?php
// 不使用任何方sql注入
// 接受表单传过来的值
$username = $_POST['username'];
$password = $_POST['password'];
// 连接数据库
$mysqli = @new mysqli('localhost','root','root','test');
if ($mysqli->connect_error) {
die("CONNECT_ERROR:".$mysqli->connect_error);
}
// 设置字符集
$mysqli->set_charset('utf-8');
// 创建sql语句
$sql = "SELECT * FROM `user` WHERE `name`='{$username}' AND `password`='{$password}'";
// 执行sql语句
$res = $mysqli->query($sql);
// 查看受影响行数
// var_dump($res->num_rows);
// 查看所有数据
// $res->fetch_all();
// 以一个关联数组,数值索引数组,或者两者皆有的方式抓取一行结果
// $res->fetch_array();
// 以一个关联数组方式抓取一行结果
// $res->fetch_assoc()
// 以一个枚举数组方式返回一行结果
// $res->fetch_row();
// 释放结果集
// $res->free():
// 关闭数据库
// $mysqli->close($mysqli);
?>
防sql注入/预处理/mysqli_stmt类
mysqli_stmt类的对象可以定义和执行参数化的SQL命令,即预处理(Prepared Statement)的机制。
mysqli_stmt对象中的属性 | 作用 |
---|---|
$mysqli_stmt::affected_rows | 返回受上次执行语句影响的总行数:修改、删除或插入 |
$mysqli_stmt::num_rows | 返回语句结果集中的行数 |
$mysqli_stmt::errno | 返回最近一次语句调用的错误代码 |
$mysqli_stmt::error | 返回最后一条语句错误的字符串描述 |
mysqli_stmt::prepare() | 准备执行 SQL 语句 |
mysqli_stmt::bind_param() | 绑定变量参数到 prepared 语句 |
mysqli_stmt::bind_result() | 绑定变量参数到 prepared 语句,用于结果存储 |
mysqli_stmt::execute() | 执行预处理sql语句 |
mysqli_stmt::get_result() | 获取 prepared 语句中的结果。 |
mysqli_stmt::fetch() | 获取 prepared 语句中的结果, 返回true,否则返回false |
mysqli_stmt::free_result() | 释放给定语句处理存储的结果集所占内存 |
$sql = "INSERT INTO 表名(字段名) values (?[使用?给值占位])";
例:
$sql = "INSERT INTO STU(USERNAME) VALUES (?)";
// 给预处理sql语句准备sql语句
$stmt = $mysqli->prepare($sql);
// 给占位符绑定值
$stmt->bind_param('值类型[首字母缩写]',变量[值用一个变量]);
例:
$name = '秀儿';
// s 是字符串类型
$stmt->bind_param('s',$name);
// 执行预处理语句[mysqli_stmt::execute()执行 prepared 查询]
例:
$res = $stmt->execute();
// 判断sql语句是否执行成功
if ($res) {
echo $stmt->affected_rows;
} else {
echo '错误';
}
// 登录界面
<!DOCTYPE html>
<html>
<head>
<title>用户登录</title>
</head>
<body>
<h2>用户登录</h2>
<form action="actions.php" method="post">
<!-- <form action="action.php" method="post"> -->
<table>
<tr>
<td>用户名</td>
<td>
<input type="text" name="username">
</td>
</tr>
<tr>
<td>密码</td>
<td>
<input type="password" name="password">
</td>
</tr>
<tr align="center">
<td colspan="2">
<input type="submit" name="sub">
</td>
</tr>
</table>
</form>
</body>
</html>
// 数据处理文件
<?php
// 使用预处理防sql注入
// 接受post传值
$username = $_POST['username'];
$password = $_POST['password'];
// 连接数据库
$mysqli = @new mysqli('localhost','root','root','test');
if ($mysqli->connect_error) {
die("COONECT_ERROR:".$mysqli->connect_error);
}
// 设置字符集
$mysqli->set_charset('utf-8');
// 设置sql语句
$sql = "SELECT * FROM `user` WHERE `name`=? AND `password`=?";
// 准备预处理sql语句
$stmt = $mysqli->prepare($sql);
// 绑定参数
$stmt->bind_param('ss',$username,$password);
// 执行预处理sql语句
$stmt->execute();
// mysqli_stmt::get_result()获取 prepared 语句中的结果。
$res = $stmt->get_result();
// 返回受上次执行语句影响的总行数:修改、删除或插入
// $stmt->affected_rows;
// 返回语句结果集中的行数
// $stmt->num_rows
// 返回最近一次语句调用的错误代码
// $stmt->errno;
//返回最后一条语句错误的字符串描述
// $stmt->error;
// 获取 prepared 语句中的结果, 返回true,否则返回false
// $stmt->fetch();
// 释放结果集
$stmt->free_result();
// 关闭数据库
// $mysqli->close($mysqli);
?>
使用mysqli_result对象中的属性将获得的结果集中的数据[二维数组]遍历出来
<?php
// 连接数据
$mysqli = @new mysqli('localhost','root','root','test');
if ($mysqli->connect_errno) {
die("CONNECT:".$mysqli->connect_errno);
}
// 设置字符集
$mysqli->set_charset('utf-8');
// 设置sql语句
$sql = "SELECT * FROM `stu`";
// 执行sql语句
$res = $mysqli->query($sql);
$res = $res->fetch_all(MYSQLI_ASSOC);
if (is_array($res) && !empty($res)) {
echo "<table border='1' width='300px' align='center' >";
echo "<tr align='center'>";
echo "<td>ID</td>";
echo "<td>姓名</td>";
echo "<td>年龄</td>";
echo "</tr>";
foreach ($res as $v) {
echo "<tr align='center'>";
echo "<td>{$v['id']}</td>";
echo "<td>{$v['name']}</td>";
echo "<td>{$v['age']}</td>";
echo "</tr>";
}
echo "</table>";
}
?>