当前位置:网站首页>PHP基础知识 - PHP 使用 MySQLI
PHP基础知识 - PHP 使用 MySQLI
2022-07-28 06:58:00 【Chon.Wang】
一、PHP 使用 MySQLI
列举一些常用的 MySQLI 使用方法。本文需要你提前了解一些基本的
MySQL 增删改查语句知识。本文不作任何安全或验证方面的处理, 只列举示例。
1.0 MySQLI 执行 MySQL 语句
# 使用 query() 方法运行 MySQL 语句
对象->query($sql_string);
1.1 连接 MySQL 与创建数据库与数据表
# 本文不作任何安全或验证方面的处理, 只记录每个命令的功能。
$server_name = '127.0.0.1'; # 主机名或主机 IP
$username = 'root'; # MySQL 用户名
$password = 'root'; # MySQL 用户密码
$db_name = 'test'; # 测试数据库名
# 1. 创建 mysqli 实例, 连接 MySQL 数据库
$connect_obj = new mysqli($server_name, $username, $password);
# 连接错误码与错误原因
if ($connect_obj->connect_error){
die("连接 MySQL 失败, 错误代码: " . $connect_obj->connect_errno . ', 错误描述: ' . $connect_obj->connect_error);
}
# 2. 创建数据库
$create_database_sql = "CREATE DATABASE {
$db_name}";
$create_database_result = $connect_obj->query($create_database_sql);
# 3. 选择数据库
$select_db_result = $connect_obj->select_db($db_name);
# 4. 创建数据表
$create_table_sql = "CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户的ID', `user_name` varchar(140) NOT NULL DEFAULT '0' COMMENT '姓名', `password` varchar(120) NOT NULL COMMENT '登录密码', `sex` varchar(30) DEFAULT NULL COMMENT '性别', `creattime` varchar(40) NOT NULL COMMENT '创建时间', `is_del` enum('YES','NO') DEFAULT 'NO', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='用户表';";
$create_table_result = $connect_obj->query($create_table_sql);
1.2 字符集操作
MySQL常见字符集有四种:BGK、UTF8、utf8mb4、GB2312、Latin1
# 设置默认字符集
$cahrset_result = $connect_obj->set_charset('utf8');
# 获取默认字符集
$character_set_name = $connect_obj->character_set_name();
1.3 新增操作
$insert_sql = "INSERT INTO user (user_name, password, sex, creattime) VALUES ('Leslie','123456','MAN','1658569655')"; # SQL 语句
$insert_result = $connect_obj->query($insert_sql); # 执行 SQL 语句
$inseret_id = $connect_obj->insert_id; # 获取新插入数据的自增 ID
1.4 删除操作
$delete_sql = "DELETE FROM user WHERE id < 5"; # 删除功能的 SQL 语句
$delete_result = $connect_obj->query($delete_sql); # 执行 SQL 语句
$delete_affected_rows = $connect_obj->affected_rows; # 获取最近一条 SQL 语句执行后所影响的行数
1.5 修改操作
$update_sql = "UPDATE user SET user_name = 'Chon' WHERE id = 6"; # 删除功能的 SQL 语句
$update_result = $connect_obj->query($update_sql); # 执行 SQL 语句
$update_affected_rows = $connect_obj->affected_rows; # 获取最近一条 SQL 语句执行后所影响的行数
1.6 查询操作
# 先获取查询结果
$select_all_sql = "SELECT * FROM user where id > 10";
$select_all_result = $connect_obj->query($select_all_sql); # 执行 SQL 语句
1.6.1 获取多条数据
$assoc_all = mysqli_fetch_all($select_all_result, MYSQLI_ASSOC); # 从结果集中取所有行, 以关联数组返回
$num_all = mysqli_fetch_all($select_all_result, MYSQLI_NUM); # 从结果集中取所有行, 以索引数组返回
1.6.2 获取单条数据
# 1. 对象格式
$obj_row = mysqli_fetch_object($select_all_result); # 从结果集中取当前行, 以对象格式返回
# 2. 数组格式 - 关联数组或索引数组
$assoc_row_1 = mysqli_fetch_assoc($select_all_result); # 从结果集中取当前行, 以关联数组返回
$num_row_1 = mysqli_fetch_row($select_all_result); # 从结果集中取当前行, 以索引数组返回
# 3. 数组格式 - 关联数组或索引数组
$assoc_row_2 = mysqli_fetch_array($select_all_result, MYSQLI_ASSOC); # 从结果集中取当前行, 以关联数组返回
$num_row_2 = mysqli_fetch_array($select_all_result, MYSQLI_NUM); # 从结果集中取当前行, 以索引数组返回
1.6.3 获取结果集总数量
$rows_num = mysqli_num_rows($select_all_result);
1.6.4 数据处理
# 常用结果集处理方式, 循环结果集, 一行行处理
# 关联数组格式处理方式, mysql_fetch_assoc 可用 1.6.2 中其它数据获取方式替换
while ($row_array = mysqli_fetch_assoc($select_all_result)){
# 数据的一些处理
}
# 对象格式处理方式
while ($row_object = mysqli_fetch_object($select_all_result)){
# 数据的一些处理
}
1.6.5 释放结果内存
mysqli_free_result($select_all_result);
1.7 事务操作
# 事务 - 第一步: 关闭自动提交
$connect_obj->autocommit(0); # 关闭自动提交
# 事务 - 第二步: CUD 等操作
$result = "SQL 操作"
# 事务 - 第三步: 提交事务或回滚事务
if ($result){
# 如果运行结果正确, 则提交事务
$connect_obj->commit();
} else {
# 如果错误则回滚事务
$connect_obj->rollback();
}
# 事务 - 第四步: 开启自动提交
$connect_obj->autocommit(1);
1.8 获取其它信息
# 返回 MySQL 客户端库版本
$client_info = $connect_obj->get_client_info();
# 返回 MySQL 服务器端版本
$server_info = $connect_obj->get_server_info();
1.9 关闭 MySQL 连接
# 关闭先前的 MySQL 连接
$close_result = $connect_obj->close();
二、实例代码
<?php
# 本文不作任何安全或验证方面的处理, 只列举示例。
$server_name = '127.0.0.1'; # 主机名或主机 IP
$username = 'root'; # MySQL 用户名
$password = 'root'; # MySQL 用户密码
$db_name = 'test'; # 测试数据库名
# 1. 创建 mysqli 实例, 连接 MySQL 数据库
$connect_obj = new mysqli($server_name, $username, $password);
# 错误码与错误原因
if ($connect_obj->connect_error){
die("连接 MySQL 失败, 错误代码: " . $connect_obj->connect_errno . ', 错误描述: ' . $connect_obj->connect_error);
}
# 2. 创建数据库
/* $create_database_sql = "CREATE DATABASE {$db_name}"; $create_database_result = $connect_obj->query($create_database_sql); */
# 3. 选择数据库
$select_db_result = $connect_obj->select_db($db_name);
# 4. 创建数据表
/* $create_table_sql = "CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户的ID', `user_name` varchar(140) NOT NULL DEFAULT '0' COMMENT '姓名', `password` varchar(120) NOT NULL COMMENT '登录密码', `sex` varchar(30) DEFAULT NULL COMMENT '性别', `creattime` varchar(40) NOT NULL COMMENT '创建时间', `is_del` enum('YES','NO') DEFAULT 'NO', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='用户表';"; $create_table_result = $connect_obj->query($create_table_sql); */
# 新增操作
$insert_sql = "INSERT INTO user (user_name, password, sex, creattime) VALUES ('Leslie','123456','MAN','1658569655')"; # SQL 语句
$insert_result = $connect_obj->query($insert_sql); # 执行 SQL 语句
$inseret_id = $connect_obj->insert_id; # 获取新插入数据的自增 ID
# 删除操作
$delete_sql = "DELETE FROM user WHERE id < 5"; # 删除功能的 SQL 语句
$delete_result = $connect_obj->query($delete_sql); # 执行 SQL 语句
$delete_affected_rows = $connect_obj->affected_rows; # 获取最近一条 SQL 语句执行后所影响的行数
# 修改操作
$update_sql = "UPDATE user SET user_name = 'Chon' WHERE id = 6"; # 删除功能的 SQL 语句
$update_result = $connect_obj->query($update_sql); # 执行 SQL 语句
$update_affected_rows = $connect_obj->affected_rows; # 获取最近一条 SQL 语句执行后所影响的行数
# 查询操作 - 开始
# 查询数据
$select_all_sql = "SELECT * FROM user where id > 10";
$select_all_result = $connect_obj->query($select_all_sql); # 执行 SQL 语句
# 1. 获取多条数据
# $assoc_all = mysqli_fetch_all($select_all_result, MYSQLI_ASSOC); # 从结果集中取所有行, 以关联数组返回
# $num_all = mysqli_fetch_all($select_all_result, MYSQLI_NUM); # 从结果集中取所有行, 以索引数组返回
# 2. 获取单条数据
# 1. 对象格式
# $obj_row = mysqli_fetch_object($select_all_result); # 从结果集中取当前行, 以对象格式返回
# 2. 数组格式 - 关联数组或索引数组
# $assoc_row_1 = mysqli_fetch_assoc($select_all_result); # 从结果集中取当前行, 以关联数组返回
# $num_row_1 = mysqli_fetch_row($select_all_result); # 从结果集中取当前行, 以索引数组返回
# 3. 数组格式 - 关联数组或索引数组
# $assoc_row_2 = mysqli_fetch_array($select_all_result, MYSQLI_ASSOC); # 从结果集中取当前行, 以关联数组返回
# $num_row_2 = mysqli_fetch_array($select_all_result, MYSQLI_NUM); # 从结果集中取当前行, 以索引数组返回
# 3. 获取结果集总数量
$num_rows = mysqli_num_rows($select_all_result);
# 4. 数据处理
# 常用结果集处理方式, 循环结果集, 一行行处理
# 关联数组格式处理方式, mysql_fetch_assoc 可用 1.6.2 中其它数据获取方式替换
while ($row_array = mysqli_fetch_assoc($select_all_result)){
# 数据的一些处理
}
# 对象格式处理方式
while ($row_object = mysqli_fetch_object($select_all_result)){
# 数据的一些处理
}
# 5. 释放结果内存
mysqli_free_result($select_all_result);
# 查询操作 - 结束
# 事务 - 开始
# 事务 - 第一步: 关闭自动提交
$connect_obj->autocommit(0); # 关闭自动提交
# 事务 - 第二步: CUD 等操作
$result = "SQL 操作";
# 事务 - 第三步: 提交事务或回滚事务
if ($result){
# 如果运行结果正确, 则提交事务
$connect_obj->commit();
} else {
# 如果错误则回滚事务
$connect_obj->rollback();
}
# 事务 - 第四步: 开启自动提交
$connect_obj->autocommit(1);
# 事务 - 结束
# 返回 MySQL 客户端库版本
$client_info = $connect_obj->get_client_info();
# 返回 MySQL 服务器端版本
$server_info = $connect_obj->get_server_info();
# 关闭先前的 MySQL 连接
$close_result = $connect_obj->close();
边栏推荐
- 本人男,27岁技术经理,收入太高,心头慌得一比
- SQL function
- CarSim simulation quick start (10) - Modeling of braking system
- CAT1 4G+以太网开发板232数据通过4G模块TCP发到服务器
- 2022牛客多校第二场解题报告
- Simple use of unity queue
- JS thoroughly understand this point
- C#,入门教程——程序运行时的调试技巧与逻辑错误探针技术与源代码
- 2022 Niuke multi school second problem solving Report
- 百度智能云九州区县大脑,描绘城乡新蓝图!
猜你喜欢

c语言中函数的介绍(血书20000字!!!!)

Melt cloud x chat, create a "stress free social" habitat with sound

阻塞队列LinkedBlockingQueue 源码解析

C#,入门教程——程序运行时的调试技巧与逻辑错误探针技术与源代码

招贤纳士,GBASE高端人才招募进行中

Can‘t connect to server on ‘IP‘ (60)

A group of South University students rely on science and technology to go to sea, with an annual income of 1billion
![[pyqt] pyqt development experience_ How to find events and methods of controls](/img/40/7597d6413c88793e22276325d5f602.png)
[pyqt] pyqt development experience_ How to find events and methods of controls

五张图看懂EMI电磁干扰的传播过程-方波陡峭程度对高频成分的影响,时序到频域频谱图形,波形形状对EMI辐射的影响。

2022 Niuke multi school first problem solving Report
随机推荐
CarSim simulation quick start (10) - Modeling of braking system
Unity切换到另一个场景的时候,发现该场景变暗了
sql server时间字段排序
Allure use
pyspark更改列顺序存入iceberg数据库
leetcode/数组中和为0的三个不同数
Meituan Er Mian: why does redis have sentinels?
The fourth phase (2021-2022) research on the implementation of cloud native technology in traditional industries - central state-owned enterprises was officially released
Usage of qmap
半桥BUCK电路—记录篇
Spiral matrix
Simple use of unity queue
模型预测控制(MPC)解析(九):二次规划的数值解(下)
Leetcode/ sum of two numbers in a sorted array
Understand CDN
ASP. Net core foundation V
Es6: template string
豪华版h5俄罗斯方块小游戏源码
学术界爆火的类脑智能,啥时候能落地?来听行业大咖怎么说丨量子位·对撞派 x 时识科技...
Es6: arrow function usage