批改状态:合格
老师批语:写的很好,前面学的前端也没忘,不过一定要多练,学会数据库操作可以写很多东西了,可以发挥想象试着写一些功能。
extension=mysqli去掉分号注释
extension_dir目录是否正确
phpinfo();函数显示php所有配置信息
var_dump(extension_loaded('mysqli'));返回true加载成功,否则加载失败
var_dump(get_loaded_extensions());返回所有加载项
var_dump(function_exists('mysqli_connect'));检查指定的函数是否已经定义
mysqli类的对象主要控制PHP和MYSQL数据库服务器之间的连接,数据库选择,发送SQL语句,以及设置字符集。
$mysql = new mysqli('localhost','用户名','密码','数据库名');
//建立mysql连接,并且打开指定数据库$mysql = @new mysqli('localhost','root','wang1111','tp5');print_r($mysql);

connect_errno 返回最后一次的错误代码
connect_error 返回最后一次的错误信息描述
errno 返回最近一次的错误代码
error 返回最近一次的错误信息描述
die(); 函数输出一条消息,并退出当前脚本
@ PHP中用作错误控制操作符,可以忽略错误信息
//如果数据库账号密码不对的话,就返回错误信息if($mysqli->connect_errno){//如果存在连接错误//connect_errno返回最后一次的错误代码die("CONNECT_ERROR:".$mysqli->connect_error);//die() 函数输出一条消息,并退出当前脚本//connect_error返回最后一次的错误信息描述}

$mysqli::set_charset() 设置默认的客户端字符集
$mysqli::query() 在数据库内执行查询
失败返回false,成功执行SELECT, SHOW, DESCRIBE或 EXPLAIN查询会返回一个mysqli_result 对象,其他查询则返回TRUE。
$multi_query() 执行多条SQL语句的查询
第一条语句执行成功返回true,否则返回false,并且后面的sql语句都不会执行成功
$mysqli::prepare() )准备(prepare)需要执行的 SQL 语句
mysqli_prepare() 返回一个 statement 对象,如果发生错误则返回 FALSE。
$mysqli::insert_id 返回上次查询中所自动生成的 ID
$mysqli::close() 关闭先前打开的数据库连接
更新数据
//- 更新一条数据$mysql = new mysqli('localhost','root','wang1111','tp5');if($mysql->connect_errno){die("CONNECT_ERROR:".$mysql->connect_error);}$mysql->set_charset('utf8');$sql = "UPDATE staff SET name='孙悟空' WHERE name='郭靖'";$res = $mysql->query($sql);var_dump($res);

//插入一条数据$sql = "INSERT INTO user(`username`,`password`) VALUES ('Timo','Timo')";//反引号``防止和关键字冲突$res = $mysql->query($sql);if($res){echo "恭喜注册成功,您是本站的第".$mysql->insert_id."位用户";//$mysqli::insert_id返回上次查询中所自动生成的 ID}

//删除数据$sql = "DELETE FROM `user` WHERE `id` >=5";$res = $mysql->query($sql);if($res){echo $mysql->affected_rows.'条记录受影响<br>';}else{echo "ERROE:".$mysql->errno.":".$mysql->error;}

//查询操作/* 失败时返回 FALSE, 通过mysqli_query()成功执行SELECT, SHOW, DESCRIBE或 EXPLAIN查询会返回一个mysqli_result 对象,其他查询则返回TRUE。 */$sql = "SELECT `username`,`password` FROM `user`";$res = $mysql->query($sql);var_dump($res);$mysql->close();//关闭先前打开的数据库连接

这个类的对象包含SELECT查询的结果、获取结果集中数据的成员方法,以及和查询的结果有关的成员属性。
mysqli_result::fetch_all() 抓取所有的结果行并且以关联数组,数值索引数组,或者两者皆有的方式返回结果集。
$sql = "SELECT `username`,`password` FROM `user`";$res = $mysql->query($sql);$a = $res->fetch_all();print_r($a);/* mysqli_result::fetch_all()抓取所有的结果行并且以关联数组,数值索引数组,或者两者皆有的方式返回结果集 */

mysqli_result::fetch_array() 以一个关联数组,数值索引数组,或者两者皆有的方式抓取一行结果
$sql = "SELECT `username`,`password` FROM `user`";$res = $mysql->query($sql);$a = $res->fetch_array();print_r($a);

mysqli_result::fetch_assoc() 以一个关联数组方式抓取一行结果
$sql = "SELECT `username`,`password` FROM `user`";$res = $mysql->query($sql);$a = $res->fetch_assoc();print_r($a)

mysqli_result::fetch_row() 以一个枚举数组方式返回一行结果
$sql = "SELECT `username`,`password` FROM `user`";$res = $mysql->query($sql);$a = $res->fetch_row();print_r($a)

$mysqli_result::num_rows 获取结果中行的数量
$sql = "SELECT `username`,`password` FROM `user`";$res = $mysql->query($sql);$a = $res->num_rows;print_r($a)

mysqli_result::free() 释放与一个结果集相关的内存
$sql = "SELECT `username`,`password` FROM `user`";$res = $mysql->query($sql);$a = $res->num_rows;var_dump($a);echo '<hr>';$b = $res->free();var_dump($b);

mysqli_stmt类的对象可以定义和执行参数化的SQL命令,即预处理(Prepared Statement)的机制。
mysqli_stmt::bind_param() 绑定变量参数到 prepared 语句
//mysql预处理机制,防止sql注入//1.建立到mysql的连接,并且打开指定的数据库$mysqli = new mysqli('localhost','root','wang1111','tp5');if($mysqli->connect_errno){die("CONNECT_ERROR:".$mysqli->connect_error);}//2.设置字符集$mysqli->set_charset('utf-8');$sql = "INSERT INTO `user`(`username`,`password`,`age`) VALUES(?,?,?)";//准备需要执行的SQL语句//返回一个statement对象,如果发生错误返回false$stmt = $mysqli->prepare($sql);//var_dump($res);//bing_param()绑定变量参数到prepared语句$username = 'php.cn';$password = md5('php.cn');$age = 12;$stmt->bind_param('ssi',$username,$password,$age);var_dump($stmt);

mysqli_stmt::execute() 执行 prepared 查询
//执行预处理语句execute()$a = $stmt->execute();var_dump($a);

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>实战练习</title><style>body{margin:0;padding: 0;box-sizing: border-box;background-color: gainsboro;display:flex;justify-content: center;align-items: center;}.content{width: 500px;height: 300px;border-radius: 10px;box-shadow: 0 0 5px #888;background-color: #fff;position:absolute;top:30%;padding:10px;}</style></head><body><table class="content"><form action="enter.php" method="post"><tr><td><label for="username">账号:</label></td><td><input type="text" name="username" id="username"></td></tr><tr><td><label for="password">密码:</label></td><td><input type="password" name="password" id="password"></td></tr><tr><td colspan="2"><input type="submit" name="sub" value="提交"></td></tr></form></table></body></html>
<?php//数据接收$username = $_POST['username'];$password = $_POST['password'];//连接数据库$mysqli = @new mysqli('localhost','root','wang1111','tp5');if($mysqli->connect_errno){die("CONNECT_ERROR:".$mysqli->connect_error);}$mysqli->set_charset('utf-8');//mysqli_stmt类的对象可以定义和执行参数化的SQL命令,即预处理//使用问号参数占位符来构成预处理sql语句$sql = "SELECT * FROM `user` WHERE `username` = ? AND `password` = ?";//$res = $mysqli->query($sql);//var_dump($res);$stmt = $mysqli->prepare($sql);$stmt->bind_param('ss',$username,$password);$stmt->execute();//get_result()获取结果$res = $stmt->get_result();print_r($res->num_rows);


<?php//数据接收$username = $_POST['username'];$password = $_POST['password'];//连接数据库$mysqli = @new mysqli('localhost','root','wang1111','tp5');if($mysqli->connect_errno){die("CONNECT_ERROR:".$mysqli->connect_error);}$mysqli->set_charset('utf-8');//mysqli_stmt类的对象可以定义和执行参数化的SQL命令,即预处理//使用问号参数占位符来构成预处理sql语句$sql = "SELECT * FROM `user` WHERE `username` = '{$username}' AND `password` = '{$password}'";$res = $mysqli->query($sql);print_r($res->num_rows);


| 函数名 | 描述 |
|---|---|
| affected_rows | 获取上次mysql操作受影响的行数 |
| connect_errno | 返回最后一次连接数据库的错误代码 |
| connect_error | 返回最后一次连接数据库的错误描述,类型为字符串 |
| errno | 返回最近一次函数调用所产生的错误代码 |
| error | 返回最近一次错误代码的描述,类型是字符串 |
| set_charset() | 设置默认的客户端字符集 |
| select_db() | 为数据库查询设置默认数据库 |
| query() | 在数据库内执行查询 |
| multi_query() | 执行多条SQL语句的查询,第一条语句执行成功返回true,否则返回false |
| prepare() | 准备(prepare)需要执行的 SQL 语句,返回一个 statement 对象 |
| insert_id | 返回上次查询中所自动生成的 ID |
| mysqli::close() | 关闭先前打开的数据库连接 |
| 函数名 | 描述 |
|---|---|
| fetch_all() | 抓取所有的结果行并且以关联数组,数值索引数组,或者两者皆有的方式返回结果集 |
| fetch_array() | 以一个关联数组,数值索引数组,或者两者皆有的方式抓取一行结果 |
| fetch_assoc() | 以一个关联数组方式抓取一行结果 |
| fetch_row() | 以一个枚举数组方式返回一行结果 |
| num_rows | 获取结果中行的数量 |
| free() | 释放与一个结果集相关的内存 |
| 函数名 | 描述 |
|---|---|
| affected_rows | 返回受上次执行语句影响的总行数 |
| num_rows | 返回语句结果集中的行数 |
| errno | 返回最近一次语句调用的错误代码 |
| error | 返回最后一条语句错误的字符串描述 |
| prepare() | 准备执行 SQL 语句 |
| bind_param() | 绑定变量参数到 prepared 语句 |
| bind_result() | 绑定变量参数到 prepared 语句,用于结果存储 |
| execute() | 执行 prepared 查询 |
| get_result() | 获取 prepared 语句中的结果 |
| fetch() | 获取 prepared 语句中的结果, 返回true,否则返回false |
| free_result() | 释放给定语句处理存储的结果集所占内存 |
<?php//连接数据库$localhost = 'localhost';$username = 'root';$password = 'wang1111';$database = 'tp5';$mysqli = new mysqli($localhost,$username,$password,$database);//判断数据库连接是否正确if($mysqli->connect_error){die("CONNECT_ERROR:".$mysqli->error);}//查询数据库staff表的所有内容$sql = "SELECT * FROM `user`";//执行sql语句,并将结果集赋值给$res变量$res = $mysqli->query($sql);//遍历$res结果集foreach($res as $value){echo $value['id'].'|'.$value['username'].'|'.$value['password'].'|'.$value['age'].'<br>';}//释放资源,关闭数据库连接$mysqli->free;$mysqli->close();

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号